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 .