【发布时间】:2016-08-15 06:22:10
【问题描述】:
我有一个在 Azure VM 中运行的 Ubuntu 16.04 (Xenial)。我已按照说明安装 Docker,一切看起来都很好。
当我触发docker run 时,我需要做的一件事是传递--net=host,它允许我在容器内运行apt-get update 和其他依赖互联网的命令。
当我尝试基于现有的 Ubuntu 映像触发 docker build 时,问题就出现了。它失败了:
这里的问题是没有办法将--net=host 传递给构建命令。我看到 Docker GitHub 上存在一些问题(#20987、#10324)但没有明确的解决方案。
有一个 existing answer on Stack Overflow 涵盖了我想要的场景,但这在云虚拟机中不起作用。
对可能发生的事情有什么想法吗?
更新 1:
这是docker version 的输出:
Client:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 22:11:10 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 22:11:10 2016
OS/Arch: linux/amd64
更新 2:
这是docker network ls的输出:
NETWORK ID NAME DRIVER SCOPE
aa69fa066700 bridge bridge local
1bd082a62ab3 host host local
629eacc3b77e none null local
【问题讨论】:
-
apt-get 仍应使用默认桥接网络工作,除非您的网络需要使用代理服务器或具有阻止 NAT 流量的防火墙规则。如果您尝试使用桥接网络在容器中运行 ping 或 curl 会发生什么?
-
ping和curl都直接在 VM 上工作。docker build仍然失败。 -
它们在容器中工作吗? VM 使用主机网络,但容器使用桥接网络。
-
这是诀窍,如上所述 - 当我执行
docker run时,我可以通过--net=host然后ping、apt-get和curl将起作用。无法将--net=host传递给docker build,这会导致失败。 -
我的意思是默认使用桥接网络,这些仍然可以工作。找出这些不起作用的原因可能会帮助您找到解决问题的方法。
标签: azure ubuntu docker cloud containers