Docker:npm安装在代理之后

我有这个Dockerfile:

FROM node:argon ENV http_proxy http://user:pass@proxy.company.priv:3128 ENV https_proxy https://user:pass@proxy.company.priv:3128 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app/ RUN npm install # Bundle app source COPY . /usr/src/app EXPOSE 8080 CMD [ "npm", "start" ] 

但是我得到这个错误,在npm安装步骤中:

npm信息它工作,如果它结束了npm信息使用npm@2.14.12 npm信息使用node@v4.2.6 npm WARN package.json deployer-ui@1.0.0没有描述npm警告package.json deployer-ui@1.0。 0没有存储库字段。 npm WARN package.json deployer-ui@1.0.0没有README数据npm info预安装deployer-ui@1.0.0 npm info尝试registry请求在7:09:23 AM试试#1 npm http请求GET https://registry。 npmjs.org/body-parser npm info尝试registry请求在7:09:23上午尝试#1 npm http请求GET https://registry.npmjs.org/express npm info重试将重试,上次尝试时出错:错误:隧道套接字无法build立,原因=写EPROTO npm信息重试将重试,最后一次尝试错误:错误:隧道套接字无法build立,原因=写EPROTO

我想这是由于代理。 我也试过了

 RUN npm config set proxy http://user:pass@proxy.company.priv:3128 RUN npm config set https-proxy http://user:pass@proxy.company.priv:3128 

但仍然得到相同的错误。

此外,在我的文件/etc/systemd/system/docker.service.d/http-proxy.conf我有这样的:

 Environment="HTTP_PROXY=http://user:pass@proxy.company.priv:3128" Environment="HTTPS_PROXY=https://user:pass@proxy.company.priv:3128" 

提前致谢。

首先, https_proxy应该使用http url,而不是https url。

其次,你不需要在你的Dockfile中embedded你的代理设置:你可以使用构build时间variables

docker build --build-arg HTTP_PROXY=http://user:pass@proxy.company.priv:3128 --build-arg HTTPS_PROXY=http://user:pass@proxy.company.priv:3128 .

最后, docker服务级别的代理设置允许docker守护进程从互联网上获取图像。 这并不意味着docker build执行的unix命令( RUN指令)会从中受益。 因此需要将它们作为构build时环境variables传递。

我也有同样的问题,并不想在我的图像中设置任何代理信息,因为我不想依赖于我的公司环境。

我的解决scheme是使用在网关模式下运行的cntlm。 要做到这一点,我把标志Gateway设置为yes下面的允许规则在我的cntlmconfiguration文件中:

  Gateway yes # Allow local Allow 127.0.0.1 # Allow docker subnetwork Allow 172.17.0.0/16 

然后,我可以通过获取dokcer0接口地址(通过ifconfig命令获得)来运行我的docker文件:

 docker build -t my-image --build-arg HTTP_PROXY=http://172.17.0.1:3128 --build-arg HTTPS_PROXY=http://172.17.0.1:3128 .