45

我在 CentOS docker 主机上有一个 CentOS docker 容器。当我使用此命令运行 docker 映像docker run -d --net=host -p 8777:8777 ceilometer:1.x时,docker 容器会获取主机的 IP,但没有分配给它的端口。

如果我在没有“--net=host”的情况下运行相同的命令,docker 会docker run -d -p 8777:8777 ceilometer:1.x公开端口但使用不同的 IP。码头工人版本是 1.10.1。我希望 docker 容器具有与暴露端口的主机相同的 IP。Dockerfile我在指令中也提到过,EXPOSE 8777但在命令中提到“--net=host”时没有用docker run

4

2 回答 2

108

我被这个答案弄糊涂了。显然,我的 docker 映像应该可以在 8080 端口上访问。但事实并非如此。然后我读

https://docs.docker.com/network/host/

去引用

主机网络驱动程序仅适用于 Linux 主机,不支持 Docker for Mac、Docker for Windows 或 Docker EE for Windows Server。

这很烦人,因为我在 Mac 上。docker 命令应该报告一个错误,而不是让我认为它应该工作。

讨论为什么不报错

https://github.com/docker/for-mac/issues/2716

不确定我是否确信。

于 2018-09-28T11:47:12.017 回答
30

码头工人版本是 1.10.1。我希望 docker 容器与主机具有相同的 ip,并暴露了端口。

当您使用--net=host它时,它会告诉容器使用主机网络堆栈。所以你不能端口暴露给主机,因为它主机(就网络堆栈而言)。

docker inspect可能不会显示公开端口,但如果您有一个应用程序正在侦听某个端口,它将像在主机上运行一样可用。

于 2016-09-17T16:46:42.823 回答