apt-get 在 docker 后面的公司代理
apt-get in docker behind corporate proxy
我正在尝试使用 Docker 在公司代理服务器后面设置开发环境。尽我所能,我无法让 docker 容器与代理服务器通信。
代理服务器和 apt-get 在 Ubuntu 12.04
主机上运行良好
在 Docker 文件中做的第一件事是尝试设置代理变量:
FROM ubuntu
RUN echo 'Acquire::http { Proxy "http://my.proxy.net:8000"; };' >> /etc/apt/apt.conf.d/01proxy
ENV HTTP_PROXY http://my.proxy.net:8000
ENV http_proxy http://my.proxy.net:8000
ENV HTTPS_PROXY https://my.proxy.net:8000
ENV https_proxy https://my.proxy.net:8000
RUN apt-get update && apt-get install -y build-essential
它可以很好地拉取图像,设置变量,但是当它进入 apt-get update 时,它尝试了一会儿然后失败了:
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg Could not resolve 'my.proxy.net'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg Could not resolve 'my.proxy.net'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg Could not resolve 'my.proxy.net'
W: Some index files failed to download. They have been ignored, or old ones used instead.
我设置的这些变量与主机 linux 安装一致(Ubuntu VirtualBox 上的 12.04,如果重要的话)
我还 /etc/default/docker 设置了:
export http_proxy="http://my.proxy.net:8000"
export http_proxy="https://my.proxy.net:8000"
有什么想法吗?
更新:
看来这是 DNS 的问题,不一定是代理服务器的问题。主机 /etc/resolve.conf 包含:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search dhcp.mycompany.com
主机是 Windows 7 机器上的 virtualbox vm 运行,我发现了各种半生不熟的解决方案,但大多数似乎都行不通。无论我尝试什么,我都无法解析代理服务器的主机名
一些评论,在 my own experience 之后:
- 确保为 HTTPS_PROXY.
使用 http url
- 在Dockerfile itself
中使用小写代理变量
- 在 docker profile (in my case, it was in
/var/lib/boot2docker/profile
) 中使用两种情况的代理变量
- 在所有情况下,设置一个
no_proxy
/NO_PROXY
变量(到 .company,.sock,localhost,127.0.0.1,::1
)
- 如果您的代理请求身份验证,请不要忘记在代理中包含凭据 url。
问题最终出在 DNS 上。 Docker 是 Ubuntu 上的 运行,它本身就是 VirtualBox 上的 Guest OS。由于它自己的 virutalizing mumbo jumbo,它在 resolv.conf.
中分配了一个名称服务器 127.0.0.1
发生这种情况时,Docker 将为自己分配一个 DNS 名称服务器 8.8.8.8(google 的名称服务器),因为 localhost 指的是 docker 容器而不是主机。
为了解决这个问题,我一直走到 Windows 和 运行
ipconfig /all
并获得了我笔记本电脑 DNS 服务器的 IP 地址。我使用 --dns=my.dns.ip.address 将这些添加到配置文件中的 DOCKER_OPTS 并重新启动 docker,我为通过代理而采取的其他措施工作正常。
除了上述解决方案之外,我们还可以在容器内执行以下操作以使用 apt-get 安装
在 VM 中,安装 docker 后 运行使用代理设置在容器中安装图像
docker 运行 -it ubuntu:14.04
apt-get 安装 wget
此命令将无法从 apt-get 中提取软件包,为此请使用以下命令
docker 运行 -it --net=host ubuntu:14.04
出口http_proxy="proxy:port"
apt-get 安装 wget
如果您在防火墙后构建,则必须使用 Docker 1.9.x build-args。
在没有构建参数的情况下构建 Docker 文件失败并阻塞如下:
3b0d8aa7c417: Pull complete
Digest: sha256:dc31e6056d314218689f028b51a58b2ca69b1dfdc5f33ead52b9351e9a19ee85
Status: Downloaded newer image for nodesource/trusty:4.2.3
---> e17bee681d8f
Step 2 : RUN apt-get update
---> Running in bdaf0006ccbd
apt-get 在此处阻塞,因为它与 archive.ubuntu.com 没有连接...您可以通过 运行 图像验证...
# docker run -ti --net=host --rm nodesource/trusty:4.2.3 bash
root@pppdc9prd9rj:/usr/src/app# apt-get update
0% [Connecting to archive.ubuntu.com (91.189.92.201)]^C
root@pppdc9prd9rj:/usr/src/app# ping archive.ubuntu.com
PING archive.ubuntu.com (91.189.91.24) 56(84) bytes of data.
^C
--- archive.ubuntu.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms
使用 build-arg 解决了问题....
# docker build -t migrator --build-arg http_proxy=$HTTP_PROXY .
arg http_proxy=$HTTP_PROXY .
Sending build context to Docker daemon 3.333 MB
Step 1 : FROM nodesource/trusty:4.2.3
---> e17bee681d8f
Step 2 : RUN apt-get update
---> Running in 019b32d09a77
Ign http://archive.ubuntu.com trusty InRelease
Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Get:2 http://archive.ubuntu.com trusty-security InRelease [65.9 kB]
Get:3 http://archive.ubuntu.com trusty Release.gpg [933 B]
Get:4 http://archive.ubuntu.com trusty Release [58.5 kB]
Get:5 http://archive.ubuntu.com trusty-updates/main Sources [326 kB]
Get:6 http://archive.ubuntu.com trusty-updates/restricted Sources [5217 B]
Get:7 http://archive.ubuntu.com trusty-updates/universe Sources [1
我正在尝试使用 Docker 在公司代理服务器后面设置开发环境。尽我所能,我无法让 docker 容器与代理服务器通信。
代理服务器和 apt-get 在 Ubuntu 12.04
主机上运行良好在 Docker 文件中做的第一件事是尝试设置代理变量:
FROM ubuntu
RUN echo 'Acquire::http { Proxy "http://my.proxy.net:8000"; };' >> /etc/apt/apt.conf.d/01proxy
ENV HTTP_PROXY http://my.proxy.net:8000
ENV http_proxy http://my.proxy.net:8000
ENV HTTPS_PROXY https://my.proxy.net:8000
ENV https_proxy https://my.proxy.net:8000
RUN apt-get update && apt-get install -y build-essential
它可以很好地拉取图像,设置变量,但是当它进入 apt-get update 时,它尝试了一会儿然后失败了:
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg Could not resolve 'my.proxy.net'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg Could not resolve 'my.proxy.net'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg Could not resolve 'my.proxy.net'
W: Some index files failed to download. They have been ignored, or old ones used instead.
我设置的这些变量与主机 linux 安装一致(Ubuntu VirtualBox 上的 12.04,如果重要的话)
我还 /etc/default/docker 设置了:
export http_proxy="http://my.proxy.net:8000"
export http_proxy="https://my.proxy.net:8000"
有什么想法吗?
更新:
看来这是 DNS 的问题,不一定是代理服务器的问题。主机 /etc/resolve.conf 包含:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search dhcp.mycompany.com
主机是 Windows 7 机器上的 virtualbox vm 运行,我发现了各种半生不熟的解决方案,但大多数似乎都行不通。无论我尝试什么,我都无法解析代理服务器的主机名
一些评论,在 my own experience 之后:
- 确保为 HTTPS_PROXY. 使用 http url
- 在Dockerfile itself 中使用小写代理变量
- 在 docker profile (in my case, it was in
/var/lib/boot2docker/profile
) 中使用两种情况的代理变量
- 在所有情况下,设置一个
no_proxy
/NO_PROXY
变量(到.company,.sock,localhost,127.0.0.1,::1
) - 如果您的代理请求身份验证,请不要忘记在代理中包含凭据 url。
问题最终出在 DNS 上。 Docker 是 Ubuntu 上的 运行,它本身就是 VirtualBox 上的 Guest OS。由于它自己的 virutalizing mumbo jumbo,它在 resolv.conf.
中分配了一个名称服务器 127.0.0.1发生这种情况时,Docker 将为自己分配一个 DNS 名称服务器 8.8.8.8(google 的名称服务器),因为 localhost 指的是 docker 容器而不是主机。
为了解决这个问题,我一直走到 Windows 和 运行
ipconfig /all
并获得了我笔记本电脑 DNS 服务器的 IP 地址。我使用 --dns=my.dns.ip.address 将这些添加到配置文件中的 DOCKER_OPTS 并重新启动 docker,我为通过代理而采取的其他措施工作正常。
除了上述解决方案之外,我们还可以在容器内执行以下操作以使用 apt-get 安装
在 VM 中,安装 docker 后 运行使用代理设置在容器中安装图像
docker 运行 -it ubuntu:14.04
apt-get 安装 wget
此命令将无法从 apt-get 中提取软件包,为此请使用以下命令
docker 运行 -it --net=host ubuntu:14.04
出口http_proxy="proxy:port"
apt-get 安装 wget
如果您在防火墙后构建,则必须使用 Docker 1.9.x build-args。
在没有构建参数的情况下构建 Docker 文件失败并阻塞如下:
3b0d8aa7c417: Pull complete
Digest: sha256:dc31e6056d314218689f028b51a58b2ca69b1dfdc5f33ead52b9351e9a19ee85
Status: Downloaded newer image for nodesource/trusty:4.2.3
---> e17bee681d8f
Step 2 : RUN apt-get update
---> Running in bdaf0006ccbd
apt-get 在此处阻塞,因为它与 archive.ubuntu.com 没有连接...您可以通过 运行 图像验证...
# docker run -ti --net=host --rm nodesource/trusty:4.2.3 bash
root@pppdc9prd9rj:/usr/src/app# apt-get update
0% [Connecting to archive.ubuntu.com (91.189.92.201)]^C
root@pppdc9prd9rj:/usr/src/app# ping archive.ubuntu.com
PING archive.ubuntu.com (91.189.91.24) 56(84) bytes of data.
^C
--- archive.ubuntu.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms
使用 build-arg 解决了问题....
# docker build -t migrator --build-arg http_proxy=$HTTP_PROXY .
arg http_proxy=$HTTP_PROXY .
Sending build context to Docker daemon 3.333 MB
Step 1 : FROM nodesource/trusty:4.2.3
---> e17bee681d8f
Step 2 : RUN apt-get update
---> Running in 019b32d09a77
Ign http://archive.ubuntu.com trusty InRelease
Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Get:2 http://archive.ubuntu.com trusty-security InRelease [65.9 kB]
Get:3 http://archive.ubuntu.com trusty Release.gpg [933 B]
Get:4 http://archive.ubuntu.com trusty Release [58.5 kB]
Get:5 http://archive.ubuntu.com trusty-updates/main Sources [326 kB]
Get:6 http://archive.ubuntu.com trusty-updates/restricted Sources [5217 B]
Get:7 http://archive.ubuntu.com trusty-updates/universe Sources [1