我正在运行一个带有docker (版本0.8.1,构建a1598d1)的虚拟机(Ubuntu13.10)。我正在尝试构建一个带有dockerfile的镜像。首先,我想要更新包(使用下面的代码-代理是模糊的),但apt-get
超时并显示错误:Could not resolve 'archive.ubuntu.com'
。
FROM ubuntu:13.10
ENV HTTP_PROXY <HTTP_PROXY>
ENV HTTPS_PROXY <HTTPS_PROXY>
RUN export http_proxy=$HTTP_PROXY
RUN export https_proxy=$HTTPS_PROXY
RUN apt-get update && apt-get upgrade
我还在主机系统中运行了以下命令:
sudo HTTP_PROXY=http://<PROXY_DETAILS>/ docker -d &
主机能够正常运行apt-get
。
如何更改dockerfile以允许它从容器内到达ubuntu服务器?
更新
我在CentOS中运行代码(将FROM ubuntu:13.10
更改为FROM centos
),它工作得很好。这似乎是Ubuntu的一个问题。
发布于 2014-03-05 06:33:54
更新
ENV中环境变量的大小写错误。正确的一个是http_proxy
。你的例子应该是:
FROM ubuntu:13.10
ENV http_proxy <HTTP_PROXY>
ENV https_proxy <HTTPS_PROXY>
RUN apt-get update && apt-get upgrade
或
FROM centos
ENV http_proxy <HTTP_PROXY>
ENV https_proxy <HTTPS_PROXY>
RUN yum update
ENV中指定的所有变量都放在每个运行命令的前面。每个RUN命令都是在自己的容器/环境中执行的,所以它不会从以前的RUN命令中继承变量!
注意:没有必要使用代理来调用docker守护进程,尽管如果你想拉取图像等,你也需要为docker守护进程设置代理。您可以在Ubuntu中为/etc/default/docker
中的守护进程设置代理(不影响容器设置)。
此外,如果您在主机(即本地主机,127.0.0.1)上运行代理,则可能会发生这种情况。主机上的Localhost与容器中的localhost不同。在这种情况下,您需要使用其他IP (如172.17.42.1)来绑定您的代理,或者如果您绑定到0.0.0.0,您可以使用172.17.42.1而不是127.0.0.1在docker build
过程中从容器连接。
您还可以在此处查找示例:How to rebuild dockerfile quick by using cache?
发布于 2015-05-15 14:26:03
更新于2018年2月10日
有了docker选项--config
中的新功能,您不再需要在Dockerfile中设置代理。在有或没有代理设置的情况下,您都可以在公司环境中和外部环境中使用相同的Dockerfile。
命令docker run
选项:
--config string Location of client config files (default "~/.docker")
或环境变量DOCKER_CONFIG
`DOCKER_CONFIG` The location of your client configuration files.
$ export DOCKER_CONFIG=~/.docker
https://docs.docker.com/engine/reference/commandline/cli/
https://docs.docker.com/network/proxy/
我建议用httpProxy, httpsProxy, ftpProxy
和noProxy
来设置代理(官方文档遗漏了变量ftpProxy
,这个变量有时很有用)
{
"proxies":
{
"default":
{
"httpProxy": "http://192.168.1.12:3128",
"httpsProxy": "http://192.168.1.12:3128",
"ftpProxy": "http://192.168.1.12:3128",
"noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
}
}
}
为您的代理环境调整代理IP和端口并保存到~/.docker/config.json
使用它正确设置yo后,您可以正常运行docker build和docker run。
$ cat Dockerfile
FROM alpine
$ docker build -t demo .
$ docker run -ti --rm demo env|grep -ri proxy
(standard input):HTTP_PROXY=http://192.168.1.12:3128
(standard input):http_proxy=http://192.168.1.12:3128
(standard input):HTTPS_PROXY=http://192.168.1.12:3128
(standard input):https_proxy=http://192.168.1.12:3128
(standard input):NO_PROXY=*.test.example.com,.example2.com,127.0.0.0/8
(standard input):no_proxy=*.test.example.com,.example2.com,127.0.0.0/8
(standard input):FTP_PROXY=http://192.168.1.12:3128
(standard input):ftp_proxy=http://192.168.1.12:3128
旧答案(已停用)
Dockerfile中的以下设置对我有效。我在CoreOS
、Vagrant
和boot2docker
上进行了测试。假设代理端口为3128
###In Centos:
ENV http_proxy=ip:3128
ENV https_proxy=ip:3128
###In Ubuntu: ENV http_proxy 'http://ip:3128‘ENV https_proxy 'http://ip:3128’
注意格式,有些有http,有些没有,有些只有一个配额。如果IP地址为192.168.0.193,则设置为:
###In Centos:
ENV http_proxy=192.168.0.193:3128
ENV https_proxy=192.168.0.193:3128
###In Ubuntu: ENV http_proxy 'http://192.168.0.193:3128‘ENV https_proxy 'http://192.168.0.193:3128’
###If您需要在coreos中设置代理,例如拉取镜像
cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.0.193:3128"
发布于 2016-02-26 05:41:21
当您想要使用Dockerfile文件进行构建时,可以使用--build-arg
选项。
通过https://github.com/docker/docker/issues/14634上的链接,请参阅“使用--build-arg和多个HTTP_PROXY进行构建”一节:
[root@pppdc9prda2y java]# docker build
--build-arg https_proxy=$HTTP_PROXY --build-arg http_proxy=$HTTP_PROXY
--build-arg HTTP_PROXY=$HTTP_PROXY --build-arg HTTPS_PROXY=$HTTP_PROXY
--build-arg NO_PROXY=$NO_PROXY --build-arg no_proxy=$NO_PROXY -t java .
注意:在您自己的系统上,请确保设置了HTTP_PROXY和NO_PROXY环境变量。
https://stackoverflow.com/questions/22179301
复制相似问题