![当 docker run 命令中提到 --net=host 时,Docker 容器不会公开端口](https://linux22.com/image/84196/%E5%BD%93%20docker%20run%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E6%8F%90%E5%88%B0%20--net%3Dhost%20%E6%97%B6%EF%BC%8CDocker%20%E5%AE%B9%E5%99%A8%E4%B8%8D%E4%BC%9A%E5%85%AC%E5%BC%80%E7%AB%AF%E5%8F%A3.png)
我在 CentOS docker 主机上有一个 CentOS docker 容器。当我使用此命令运行 docker 映像时
docker run -d --net=host -p 8777:8777 ceilometer:1.x
docker 容器获取主机的 IP,但没有分配给它的端口。如果我在没有“--net=host”的情况下运行相同的命令:
docker run -d -p 8777:8777 ceilometer:1.x
docker 公开了端口,但具有不同的 ip。 docker版本是1.10.1。我希望 docker 容器与暴露端口的主机具有相同的 IP。我在文中也提到过Dockerfile指令曝光 8777但当“--net=host”中提到时没有用码头运行命令。
答案1
如果您使用--net=host
容器共享主机的网络堆栈,并且主机的所有接口都可供容器使用, (根据 docker 的运行参考)
如果您已经共享所有内容,则不需要显式地将 8777 映射到 8777。实际上实现映射会很奇怪:将 1234 映射到 8777 会让主机也监听 8777?这就是为什么您看不到分配任何端口的原因。
只需忽略--net=host
并尝试在主机上连接到 8777,它将桥接到容器上的 8777。确保您的容器不知道它使用的实际 IP 地址。外界只能看到主机IP。