我有这个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 install 步骤中得到了这个错误:
npm info使用npm@2.14.12 npm以ok npm信息结束它是否有效 info使用node@v4.2.6 npm WARN package.json deployer-ui@1.0.0没有 description npm WARN package.json deployer-ui@1.0.0没有存储库 领域。 npm WARN package.json deployer-ui@1.0.0没有README数据npm信息 preinstall deployer-ui@1.0.0 npm info尝试注册表请求尝试#1 在上午7:09:23 npm http请求GET https://registry.npmjs.org/body-parser npm信息尝试注册表 请求尝试#1于7:09:23 AM npm http请求GET https://registry.npmjs.org/express npm信息重试将重试,错误开启 最后一次尝试:错误:无法建立隧道套接字, cause =写EPROTO npm信息重试将重试,最后一次尝试时出错: 错误:无法建立隧道套接字,因为=写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"
提前致谢。
答案 0 :(得分:11)
首先https_proxy
应该使用 http 网址,而不是https网址。
其次,您不需要在Dockfile中嵌入代理设置:您可以使用build time 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 .
最后,proxy settings at the docker service level允许docker守护程序从Internet中提取图像。这并不意味着RUN
执行的unix命令(docker build
指令)将从中受益。因此需要将它们作为构建时环境变量传递。
答案 1 :(得分:4)
我也有同样的问题,并且不想在我的图片中设置任何代理信息,因为我不想依赖于我的公司环境。
我的解决方案是使用在网关模式下运行的cntlm。为此,我在我的cntlm配置文件中将标志Gateway
设置为yes
以下允许规则:
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 .
答案 2 :(得分:1)
将其添加到Dockerfile中对我有用:
RUN npm config set https-proxy http://user:password@proxy.company.priv:80
RUN npm config set proxy http://user:password@proxy.company.priv:80
答案 3 :(得分:0)
(只是您知道,这个包是我自己写的)
您可以使用docker-container-proxy,它允许为任何docker容器配置代理,而无需编辑任何代码。
只需运行:
npx dockerproxy start --address company-proxy-address.com --port 8080
# Do anything else that needs a Proxy
答案 4 :(得分:0)
如Docker Documentation中所述,在~/.docker/config.json
中添加了以下内容对我有帮助:
{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:3001",
"httpsProxy": "http://127.0.0.1:3001",
"noProxy": "*.test.example.com,.example2.com"
}
}
}