如何在代理后面的 dockerfile 中运行 apt-get?

新手上路,请多包涵

我正在使用 docker(版本 0.8.1,构建 a1598d1)运行虚拟机(Ubuntu 13.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 的问题。

原文由 Christopher Louden 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 805
1 个回答

更新

您在 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 命令都在自己的容器/环境中执行,因此它不会从以前的 RUN 命令继承变量!

注意:不需要使用代理调用 docker daemon 来工作,但如果你想拉图像等,你也需要为 docker deamon 设置代理。您可以在 Ubuntu 中的 /etc/default/docker 中为守护进程设置代理(它不影响容器设置)。


此外,如果您 在主机(即 localhost,127.0.0.1)上运行代理,也会发生这种情况。主机上的 localhost 与容器中的 localhost 不同。在这种情况下,您需要使用另一个 IP(如 172.17.42.1)将您的代理绑定到,或者如果您绑定到 0.0.0.0,您可以在 docker build 期间使用 172.17.42.1 而不是 127.0.0.1 从容器连接 --- .

您也可以在此处查找示例: 如何使用缓存快速重建 dockerfile?

原文由 Jiri 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进