我正在尝试创建需要使用apt-get install命令的Docker容器。当前看起来像这样:
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \
build-essential \
cmake
不幸的是,当我尝试构建它时,我遇到了一些有关代理的错误。我在公司代理后面工作,我希望我的容器在这种情况下能很好地工作。
我在网上阅读了一些书,累了几个选择:
选项1
FROM ubuntu:18.04
ENV http_proxy <HTTP_PROXY>
ENV https_proxy <HTTPS_PROXY>
RUN apt-get update && apt-get upgrade
https://stackoverflow.com/a/22184601
选项2
FROM ubuntu:18.04
ENV http_proxy 'http://corporate_proxy:port'
ENV https_proxy 'http://corporate_proxy:port'
https://stackoverflow.com/a/30252882
选项3
docker build --build-arg http_proxy=$http_proxy
--build-arg https_proxy=$https_proxy -t mytest_docker .
基于https://elegantinfrastructure.com/docker/ultimate-guide-to-docker-http-proxy-configuration/
但是,这些选项都不起作用,并且总是出现相同的错误:
Err:1 http://archive.ubuntu.com/ubuntu bionic InRelease
Temporary failure resolving 'corporate_proxy'
Err:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
Temporary failure resolving 'corporate_proxy'
Err:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease
Temporary failure resolving 'corporate_proxy'
Err:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease
Temporary failure resolving 'corporate_proxy'
Reading package lists...
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/bionic/InRelease Temporary failure resolving 'corporate_proxy'
corporate_proxy 只是实际(工作)代理的占位符。
我确定代理地址正确并且可以在主机系统上工作,因为我通常可以下载所有内容。问题仅在于此docker映像。
有什么建议可以解决吗?
编辑#1
根据@Raoslaw Szamszur的回答,我进行了更多调试。不幸的是结果还是一样。
我已将值添加到config.json文件并重新启动了守护程序。接下来,我又尝试了一次,以相同的结果完成所有选项。
我还想使用以下行仅运行Ubuntu docker:
docker run --name ubunut -it -p <port_http>:<port_http> -p <port_https>:<port_https> ubuntu:18.04
一旦它运行apt-get,将无法下载与以前相同类型错误的任何内容。
这也是该容器在列表中的显示方式
docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6fdeaec3ad9 ubuntu:18.04 "/bin/bash" 3 minutes ago Up 3 minutes 0.0.0.0:<http_port>-<https_port>-><http_port>-<https_port>/tcp ubunut
答案 0 :(得分:2)
由于问题可能很复杂,我将在此处尝试进行故障排除。
选项1
首先尝试从ubuntu映像运行干净的容器,然后尝试与代理连接。但是不要忘记绑定端口:
docker run -dit --name=<conatiner-name> -p <proxy_port>:<proxy_port> ubuntu
用这种方式调试问题比编辑Dockerfile并随每次更改进行构建要容易得多。找到可行的解决方案后,将这些更改添加到Dockerfile或将其提交到新映像。
选项2
您是否尝试在config.json中添加代理设置?因为在构建映像期间,docker实际上是在临时容器内部构建的。这个临时构建容器没有绑定任何端口,这就是为什么它可能无法与您的代理进行通信的原因。
此文件可以在路径下找到:
/home/USERNAME/.docker/config.json
尝试添加此内容:
{
"proxies":
{
"default":
{
"httpProxy": "http://corporate_proxy:port",
"httpsProxy": "http://corporate_proxy:port",
"noProxy": "*.test.example.com,.example2.com"
}
}
}
Configure Docker to use a proxy server
很难为我重现此问题,我将继续考虑其他可能性。