当docker run命令中提到--net = host时,Docker容器不会公开端口

时间:2016-02-23 19:47:17

标签: docker ip dockerfile docker-build

我在CentOS docker主机上有一个CentOS docker容器。当我使用此命令运行docker image 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指令EXPOSE 8777中提到过,但在" - net = host"时没有用。在docker run命令中提到。

2 个答案:

答案 0 :(得分:20)

  

docker版本是1.10.1。我希望docker容器与暴露端口的主机具有相同的ip。

当您使用--net=host时,它告诉容器使用主机网络堆栈。因此,您无法向主机公开端口,因为 主机(就网络堆栈而言)。

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

答案 1 :(得分:7)

这个答案让我很困惑。显然我的docker映像应该在端口8080上可以访问。但事实并非如此。然后我读了

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

引用

  

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

就像在Mac上一样,这很烦人。 docker命令应该报告错误,而不是让我认为它应该起作用。

讨论为什么不报告错误

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

不确定我是否相信。