我有这个Dockerfile:
FROM node:argon
ENV http_proxy http://user:[email protected]:3128
ENV https_proxy https://user:[email protected]: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安装步骤:
新公共管理信息,它的工作,如果它使用[email protected]使用[email protected] NPM NPM信息确定NPM信息结束WARN的package.json [email protected]没有说明NPM WARN的package.json [email protected]。 0无库场。 NPM WARN的package.json [email protected]没有README数据NPM信息预装[email protected] NPM信息尝试注册请求尝试#1,在上午07时09分23秒NPM HTTP请求GET https://registry.npmjs.org/body-parser NPM信息尝试注册请求尝试#1,在上午07时09分23秒NPM HTTP请求GET https://registry.npmjs.org/express NPM信息重试将重试,在最后一次尝试错误:错误:套接字隧道无法建立,原因=写EPROTO NPM信息重试将重试,在最后一次尝试错误:错误:套接字隧道无法建立,原因=写EPROTO
我想这是由于代理。我也试图把
RUN npm config set proxy http://user:[email protected]:3128
RUN npm config set https-proxy http://user:[email protected]:3128
但仍然得到同样的错误。
此外,在我的文件/etc/systemd/system/docker.service.d/http-proxy.conf我有这样的:
Environment="HTTP_PROXY=http://user:[email protected]:3128"
Environment="HTTPS_PROXY=https://user:[email protected]:3128"
提前致谢。
首先https_proxy
应该使用一个HTTP URL,而不是HTTPS URL。
其次,你不需要在你的Dockfile嵌入您的代理服务器设置:您可以使用build time variables
docker build --build-arg HTTP_PROXY=http://user:[email protected]:3128 --build-arg HTTPS_PROXY=http://user:[email protected]:3128 .
最后,proxy settings at the docker service level允许泊坞窗守护程序从互联网上拉的图像。这并不意味着UNIX命令执行(RUN
指令)由docker build
会从中受益。因此,有必要将它们传递作为构建时的环境变量。
我也有同样的问题,并没有要设置在我的形象的任何代理信息,因为我不想依赖我的公司环境。
我的解决方案是使用在网关模式下运行的cntlm。要做到这一点,我把标志Gateway
设置为yes
我cntlm配置文件中的以下允许规则:
Gateway yes
# Allow local
Allow 127.0.0.1
# Allow docker subnetwork
Allow 172.17.0.0/16
然后,我能够获得dokcer0接口地址(含ifconfig
command得)来运行我的搬运工文件:
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 .
(只要你知道,这个包我自己写的)
您可以使用docker-container-proxy,它允许任何搬运工集装箱代理的配置,而无需修改任何代码。
赶紧跑:
npx dockerproxy start --address company-proxy-address.com --port 8080
# Do anything else that needs a Proxy