Docker:npm安装在代理后面

Héc*_*tor 13 proxy npm docker

我有这个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" ]
Run Code Online (Sandbox Code Playgroud)

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

npm info如果它以ok npm信息结束使用npm@2.14.12 npm info使用node@v4.2.6 npm warn package.json deployer-ui@1.0.0没有说明npm WARN package.json deployer-ui@1.0. 0没有存储库字段.npm WARN package.json deployer-ui@1.0.0没有自述文件数据npm信息预安装deployer-ui@1.0.0 npm信息尝试注册表请求尝试#1在7:09:23 AM npm http请求GET https://注册表. npmjs.org/body-parser npm信息尝试注册表请求尝试#1在7:09:23 AM npm http请求GET https://registry.npmjs.org/express npm info retry将重试,最后一次尝试时出错:错误:无法建立隧道套接字,因为=写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
Run Code Online (Sandbox Code Playgroud)

但仍然得到同样的错误.

而且,在我的文件/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"
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Von*_*onC 17

首先https_proxy应该使用http网址,而不是https网址.

其次,您不需要在Dockfile中嵌入代理设置:您可以使用构建时变量

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守护程序从Internet中提取图像.这并不意味着执行的unix命令(RUN指令)docker build将从中受益.因此需要将它们作为构建时环境变量传递.


Kie*_*RAY 5

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

我的解决方案是使用以网关模式运行的cntlm。为此,我将标记Gateway设置为yes以下允许规则放入我的cntlm配置文件中:

 Gateway         yes
 # Allow local
 Allow           127.0.0.1
 # Allow docker subnetwork
 Allow           172.17.0.0/16
Run Code Online (Sandbox Code Playgroud)

然后我可以通过获取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 .
Run Code Online (Sandbox Code Playgroud)