Docker:npm安装在代理

时间:2016-02-09 07:17:05

标签: proxy 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 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"

提前致谢。

5 个答案:

答案 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"
   }
 }
}