我拉一个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绑定到主机环回的正确方法是什么?
答案 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主机作为虚拟机运行,容器在虚拟机中运行,因此它们无法共享您的计算机的网络名称空间。