将Docker容器环回绑定到主机环回

时间:2018-06-21 19:39:22

标签: python-3.x docker networking containers

我拉一个docker映像(将以python 3为例)

docker pull python:3.6

然后我启动一个Docker容器

docker run -it -p 127.0.0.1:8000:8000 python:3.6 bash

(请注意,此处127.0.0.1:8000:8000中的127.0.0.1允许指定目标,主机IP,但不能指定源)

因此,如果我在容器中的0.0.0.0处启动服务器:

python -m http.server 8000 --bind 0.0.0.0

然后,我可以通过在主机上转到http://127.0.0.1:8000来从主机访问容器的服务器而没有任何问题

但是,如果我的docker服务器绑定到127.0.0.1而不是0.0.0.0:

python -m http.server 8000 --bind 127.0.0.1

然后无法从主机访问http://127.0.0.1:8000

将容器的环回127.0.0.1绑定到主机环回的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

  

将容器的环回127.0.0.1绑定到主机环回的正确方法是什么?

您不能那样做。容器内的loopback接口表示“仅此容器”,就像在主机上表示“仅此主机”一样。如果服务绑定到127.0.0.1,则无法从主机或其他容器访问该服务。

做你想要做的唯一方法是:

  • 修改应用程序配置以侦听所有接口(或专门用于eth0),或者
  • 在容器内运行一个代理,该代理绑定到所有接口并将连接转发到localhost地址。

答案 1 :(得分:1)

  

将容器的环回127.0.0.1绑定到主机环回的正确方法是什么?

在Linux上,这可以通过将Docker容器配置为使用主机网络名称空间来完成,即:

docker run --network=host

这仅在Linux上有效,因为在Linux上,您的计算机是主机,并且容器在计算机OS中作为容器运行。在Windows / OSX上,Docker主机作为虚拟机运行,容器在虚拟机中运行,因此它们无法共享您的计算机的网络名称空间。