【问题标题】:Docker can't install npm packagesDocker 无法安装 npm 包
【发布时间】:2017-05-27 10:41:16
【问题描述】:

我在 ubuntu 服务器上运行 docker。

这似乎是一个码头问题。从 ubuntu 安装 package.json 可以正常工作。

npm http request GET https://registry.npmjs.org/express
npm info retry will retry, error on last attempt: Error: getaddrinfo EAI_AGAIN registry.npmjs.org:443

似乎无法访问 npm 注册表。有什么想法吗?

Ping 工作正常!

Dockerfile:

FROM node:4-slim

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app/

RUN npm install

COPY . /usr/src/app

EXPOSE 3000

CMD [ "node", "server.js" ]

构建日志:

Sending build context to Docker daemon  66.05kB
Step 1/8 : FROM node:4-slim
 ---> cd692e27dc7f
Step 2/8 : RUN mkdir -p /usr/src/app
 ---> Running in 876d5978bdd7
 ---> 4bab541344aa
Removing intermediate container 876d5978bdd7
Step 3/8 : WORKDIR /usr/src/app
 ---> d66516529b5e
Removing intermediate container 6317ee72e20e
Step 4/8 : COPY package.json /usr/src/app/
 ---> 70483f422380
Removing intermediate container c3781f622ce4
Step 5/8 : RUN npm install
 ---> Running in 37d8afdf1c21
npm info it worked if it ends with ok
npm info using npm@2.15.11
npm info using node@v4.8.3
npm WARN package.json docker-node-test@1.0.0 No description
npm WARN package.json docker-node-test@1.0.0 No repository field.
npm WARN package.json docker-node-test@1.0.0 No README data
npm info preinstall docker-node-test@1.0.0
npm info attempt registry request try #1 at 10:58:13 AM
npm http request GET https://registry.npmjs.org/express
npm info attempt registry request try #1 at 10:58:13 AM
npm http request GET https://registry.npmjs.org/mongoose
npm info retry will retry, error on last attempt: Error: getaddrinfo EAI_AGAIN registry.npmjs.org:443
npm info retry will retry, error on last attempt: Error: getaddrinfo EAI_AGAIN registry.npmjs.org:443
npm info attempt registry request try #2 at 10:59:04 AM
npm http request GET https://registry.npmjs.org/mongoose
npm info attempt registry request try #2 at 10:59:04 AM
npm http request GET https://registry.npmjs.org/express
npm info retry will retry, error on last attempt: Error: getaddrinfo EAI_AGAIN registry.npmjs.org:443
npm info retry will retry, error on last attempt: Error: getaddrinfo EAI_AGAIN registry.npmjs.org:443
npm info attempt registry request try #3 at 11:00:44 AM
npm http request GET https://registry.npmjs.org/mongoose
npm info attempt registry request try #3 at 11:00:44 AM
npm http request GET https://registry.npmjs.org/express
npm ERR! Linux 4.4.0-78-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v4.8.3
npm ERR! npm  v2.15.11
npm ERR! code EAI_AGAIN
npm ERR! errno EAI_AGAIN
npm ERR! syscall getaddrinfo

npm ERR! getaddrinfo EAI_AGAIN registry.npmjs.org:443
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /usr/src/app/npm-debug.log

【问题讨论】:

  • 你能添加你的Dockerfile吗?
  • @nisevi 当然!完成!
  • 你在公司网络下吗?
  • 从我的笔记本电脑上尝试了你的 Dockerfile,它确实有效。正如@Robert 建议的那样,对我来说似乎是一个路由问题。
  • 肯定你有一个 docker 不尊重的内部公司 dns。在 Dockerfile 中试试这个:RUN cat /etc/resolv.conf(我猜你有 8.8.8.8 Google DNS 作为 docker 默认值,并且在你的公司中被阻止)

标签: node.js docker npm-install


【解决方案1】:

这也是我在 Docker for Windows 和 GitLab Windows 运行器上遇到的问题。问题在于docker run 网络正常工作并且能够ping/解析所有域。运行 docker build 时,npm 将失败并出现 EAI_AGAIN 错误。

分辨率

docker build--network= 可用于 Docker build docs

找到您用于 docker run 或 docker-compose 项目的工作 Docker 网络。

  • 查找泊坞窗网络:docker network ls
  • 使用上面的网络运行 Docker 构建 docker build --network=&lt;insert network from above&gt; -f "myproj\Dockerfile" -t app:latest

【讨论】:

  • 我在 docker network ls 中使用了“host”网络
【解决方案2】:

我在这里也遇到了类似的问题,在上面提到的一个解决方案中,它说要检查可用的网络使用

docker network ls

在我的情况下,它返回了

NETWORK ID     NAME      DRIVER    SCOPE
2e21805e212e   bridge    bridge    local
034ff467139e   host      host      local
ac0222d91002   none      null      local

尝试使用所有这三个,因为

sudo docker build --network=034ff467139e -t getting-started ./

完全相同的问题仍然存在, 也试过重启docker服务,也没用

编辑: 问题似乎是该命令期望网络的“名称”作为值而不是“网络 ID” 像这样运行它解决了我的问题,

docker build --network=host -t getting-started

【讨论】:

    【解决方案3】:

    这是一个连接问题,与你的代码无关,Dockerfile很好。

    这可能是一个间歇性连接问题,也可能是网络防火墙限制,或其他一些疯狂的 IP 问题。

    我看到很多间歇性的连接问题,运行各种工具来打包来自互联网的东西,有时只是其中之一。

    在与上次尝试不同的网络上的机器上尝试。

    【讨论】:

      【解决方案4】:

      这更可能是 iptables 的网络配置问题...您是否设置了 docker0 自定义范围?看看那里。

      【讨论】:

        【解决方案5】:

        这是一个连接问题 在我的情况下 docker restart 解决问题

        服务泊坞窗重启

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-12
          • 1970-01-01
          • 2021-06-08
          • 2016-11-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多