【问题标题】:Route traffic to host machine when building a docker container构建 docker 容器时将流量路由到主机
【发布时间】:2017-09-12 18:18:16
【问题描述】:

我正在构建的一个 docker 镜像通过 pip 拉取了很多 python 包。

RUN pip install -r lots-of-packages.txt

我的主机正在运行 PyPi 包镜像和缓存,以便可以快速下载这些包。

pip install 命令允许用户通过参数--index-url 指定包索引的位置:

RUN pip install --index-url http://localhost:3141/root/pypi/ -r lots-of-packages.txt

但是,在 docker build 期间,主机 localhost 指的是 docker 容器本身,而不是为缓存提供服务的主机。

通过docker build构建docker容器时如何访问宿主机上的网络资源?

docker build --add-host <host>:<ip> 似乎可以让我为 IP 设置主机名,但是在构建期间是否有有效的 IP 来寻址主机?

【问题讨论】:

  • RUN pip install -r lots-of-packages.txt
  • 感谢@KlausD。我已经修正了那个错字。

标签: python docker pip


【解决方案1】:

您可以通过在构建时指定网络模式来做到这一点:

docker build --network host ...

【讨论】:

  • "--network" requires API version 1.25, but the Docker daemon API version is 1.23 sigh,我想我正在使用 macOS 的最新版本。我可能必须想办法安装预发行版。
【解决方案2】:

最简单的方法是检查 docker0 网桥的 ip(例如使用ip a 命令)并在该网桥上使用主机 ip 而不是 localhost。因此,假设您运行 Linux 并且 docker0 ip 为 172.17.0.1,您的命令将如下所示:

RUN pip install --index-url http://172.17.0.1:3141/root/pypi/ lots-of-packages.txt

如果您在 Windows 或 Mac 上运行,那么可能会涉及一些端口转发。

【讨论】:

  • 我在 Mac 上 am 并且没有 docker0 设备。让我看看我是否能弄清楚如何设置它。
  • Mac 上的 AFAIK docker 使用某种 VM 来拥有 Linux 内核。因此,如果您的代理在主机上而不是在此虚拟机内部运行,您将需要将端口从主机转发到虚拟机。我运行 Linux 并且无法提供帮助,但我会使用的搜索词是:“docker mac forward port from host”
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多