Ily*_*mov 5 networking containers python-3.x docker
我拉了一个 docker 镜像(将使用 python 3 作为示例)
docker pull python:3.6
Run Code Online (Sandbox Code Playgroud)
然后我启动一个 docker 容器
docker run -it -p 127.0.0.1:8000:8000 python:3.6 bash
Run Code Online (Sandbox Code Playgroud)
(请注意,这里 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
Run Code Online (Sandbox Code Playgroud)
然后我可以通过在主机上访问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
Run Code Online (Sandbox Code Playgroud)
然后从主机访问http://127.0.0.1:8000不起作用。
将容器的环回 127.0.0.1 绑定到主机环回的正确方法是什么?
将容器的环回 127.0.0.1 绑定到主机环回的正确方法是什么?
在 Linux 上,可以通过将 Docker 容器配置为使用主机网络命名空间来完成此操作,即:
docker run --network=host
Run Code Online (Sandbox Code Playgroud)
这仅适用于 Linux,因为在 Linux 上,您的计算机是主机,容器在您的计算机操作系统中作为容器运行。在 Windows/OSX 上,Docker 主机作为虚拟机运行,容器在虚拟机中运行,因此它们无法共享您的计算机网络命名空间。
将容器的环回 127.0.0.1 绑定到主机环回的正确方法是什么?
你不能那样做。容器内的接口loopback表示“仅此容器”,就像在主机上表示“仅此主机”一样。如果绑定了某个服务,127.0.0.1则无法从您的主机或另一个容器访问该服务。
做你想做的事的唯一方法是:
eth0特定接口),或者localhost地址。| 归档时间: |
|
| 查看次数: |
14447 次 |
| 最近记录: |