构建Docker映像可以在桌面上正常工作。安装Node.js NPM依赖项可以正常工作。但是,当使用托管在公司代理后的持续集成服务器(如Jenkins)时,构建Docker映像会失败。
Node.js NPM依赖项
在构建Node.js包时,如果在克隆GIT依赖项时无法连接到GIT,则命令npm install会失败。
e1ce5e8407d1: Already exists
Status: Image is up to date for node:0.10.33
---> e1ce5e8407d1
Step 1 : RUN mkdir -p /usr/src/app
---> Using cache
---> 965cad0c68b0
Step 2 : WORKDIR /usr/src/app
---> Using cache
---> 4c498f0c07e9
Step 3 : COPY package.json /usr/src/app/
---> b0662a8275fb
Removing intermediate container 5aca20551452
Step 4 : RUN npm install
---> Running in 7ccf9e5362af
npm WARN package.json newww@2.0.0 No README data
npm WARN package.json Dependency 'async-cache' exists in both dependencies and devDependencies, using 'async-cache@^0.1.5' from dependencies
npm ERR! git clone https://github.com/npm/npm2es.git Cloning into bare repository '/root/.npm/_git-remotes/https-github-com-npm-npm2es-git-60a75edb'...
npm ERR! git clone https://github.com/npm/npm2es.git fatal: unable to access 'https://github.com/npm/npm2es.git/': Failed to connect to github.com port 443: Connection timed out
Java Maven、Ruby、Go Docker映像及其依赖项
构建Java、Ruby或Go容器时也会发生同样的情况,其中依赖项位于公司代理服务器上的存储库服务器中。
知道可以使用HTTP_PROXY环境变量配置Docker后,如何正确配置Docker以在CI环境中正确构建映像?
8条答案
按热度按时间kmpatx3s1#
注:Docker 1.9 * 可能 * 有助于解决此问题:
HTTP_PROXY
)用途(拟定):
hwazgwia2#
Docker有多种方法来设置在不同时间生效的代理。
如果您的
docker build
必须通过代理检索基本映像,则需要指定build-arg
s:其中
$http_proxy
和$no_proxy
是在我的bashrc中设置的。我使用了HTTP_PROXY
和http_proxy
,因为不同的实用程序将检查不同的变量(curl
检查两者,wget
只检查小写的变量,等等)。如果您的
docker build
有一个**RUN curl/wget/etc
命令必须通过代理**,您需要在您的docker映像中指定一个环境变量:如果您不希望在运行时将此环境变量包含在映像中,则可以在最后删除所有这些变量:
uqjltbpv3#
Docker守护程序HTTP代理
关于为Docker守护进程设置HTTP_PROXY环境变量,有很多文档可供使用。该环境变量仅在运行container时可用,因此在这里它对我们没有帮助。
Dockerfile中的解决方案
尽管在Dockerfile中设置环境变量HTTP_ENV或http_env可能会有所帮助,但它对我们的目标也没有帮助。
ENV http_proxy http://proxy.mycompany.com:80
原因是每个特定的服务只以不同的方式设置HTTP代理。我可以解决的方法如下。
例如,使用Dockerfile运行应用程序,我可以使用以下Dockerfile构建映像:
注意,我已经使用CLI命令配置了GIT和NPM,以便在运行NPM install命令之前显式地获取代理设置,这样,NPM和GIT依赖项将分别被自动检索和克隆。
使用此Dockerfile构建映像的结果如预期工作:
这按预期正常工作,您可以在http代理后面有一个CI/CD环境,以基于此Dockerfile重建映像。
omvjsjqw4#
从Docker 17.07开始,您也可以使用Docker客户端配置文件集中提供代理配置:
https://docs.docker.com/network/proxy/#configure-the-docker-client
mutmk8jj5#
我们正在...
并且在停靠文件的末尾...
现在(直到docker引入构建环境变量),允许代理变量用于构建而不公开它们
3b6akqbq6#
我遇到了一个问题,当企业网络不允许下载和设置docker图像,所以n/w给http代理信息。而运行docker图像构建,我传递了变量,它的工作没有任何问题。
tsm1rwdh7#
您可以使用透明代理,如中所述:
https://jpetazzo.github.io/2014/06/17/transparent-squid-proxy-docker/
okxuctiv8#
我遇到过类似的问题,
docker build
无法从Amazon ECR上托管的注册表中拉取基本映像。我发现将代理配置添加到Docker Build命令行、Docker文件或我的shell没有任何区别。对我有效的修复是更改Docker守护进程的环境。我使用的是CentOS盒,在该系统上有config目录
/etc/systemd/system/docker.service.d
和其中的http-proxy.conf
文件。我编辑了该文件以放置正确的代理配置,并重新启动了Docker守护进程,然后我的Docker构建开始工作。