【问题标题】:Why NPM is working locally but not on Docker?为什么 NPM 在本地工作,但不在 Docker 上?
【发布时间】:2019-05-21 14:00:10
【问题描述】:

我使用的是 Windows 10

我在一个新项目上,我不能在docker-compose up -d 上使用npm installnpm audit fix,所以它卡在第一个npm install 上

NPM 正在本地使用我配置的代理:

npm config set proxy http://proxy.company.com:8080

npm config set https-proxy http://proxy.company.com:8080

我尝试配置 docker 代理、windows 代理和 npm 代理,并手动安装 npm 文件夹,它在没有 docker 的情况下工作

我在 Linux 和其他计算机上也试过了,但它也不工作

节点版本为:v10.15.0

Npm 版本是:6.9.0

npm ERR! code ECONNREFUSED
npm ERR! errno ECONNREFUSED
npm ERR! FetchError: request to https://registry.npmjs.org/cors failed, reason: connect ECONNREFUSED ip.ip.ip.ip:443
npm ERR!     at ClientRequest.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/node-fetch-npm/src/index.js:68:14)
npm ERR!     at ClientRequest.emit (events.js:196:13)
...

我可以提供完整的错误

我认为这是代理问题,但我不明白为什么以及如何尝试其他方法

在另一个网络上我可以docker-compose up -d 没有任何问题

E:我试过没有结果:

ENV HTTP_PROXY "http://proxy.company.com:8080"

并配置.docker/config.json

【问题讨论】:

  • 你可以通过 docker 容器联系外界(例如:ping/curl)吗?
  • 不,我无法在 Docker 和本地 ping registry.npmjs.org,我猜它被系统管理员阻止了,我只是无法在 Windows 命令提示符上 ping

标签: node.js docker npm proxy


【解决方案1】:
http://proxy.company.com:8080

您的 docker 网络无法解决。您应该使用与主机相同的网络接口运行 docker 通过将--network host 传递给您的 docker run 命令

【讨论】:

  • 我正在尝试这样做,但我不确定如何将其添加到我的 docker-compose 文件中
  • 谢谢,我将版本更改为 3.4,并在我的 docker-compose 文件中添加了 network: host 但仍然没有
  • 如何知道 docker 是否在 compose 上使用主机网络?确定参数没问题?
【解决方案2】:

我必须使用 JSON 文件 /.docker/config.json 配置容器代理,例如:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://username:password@PROXY_IP:port",
     "httpsProxy": "http://username:password@PROXY_IP:port",
     "noProxy": "noproxiesinformation"
   }
 }
}

所以配置 Docker 代理和 Docker 容器代理,它就可以工作了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2020-12-24
    • 2019-01-18
    • 2020-04-20
    • 2021-04-26
    • 2023-01-18
    • 2022-07-01
    相关资源
    最近更新 更多