Docker容器没有';当docker run命令中提到--net=host时,不要暴露端口

Docker容器没有';当docker run命令中提到--net=host时,不要暴露端口,docker,ip,dockerfile,docker-build,Docker,Ip,Dockerfile,Docker Build,我在CentOS docker主机上有一个CentOS docker容器。当我使用此命令运行docker imagedocker 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容器与

我在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
,但在
docker run
命令中提到“-net=host”时没有任何用处

docker版本是1.10.1。我希望docker容器与主机具有相同的ip,并公开端口

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


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

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

引用

主机网络驱动程序仅在Linux主机上工作,在Docker for Mac、Docker for Windows或Docker EE for Windows Server上不受支持

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

关于为什么不报告错误的讨论


不确定我是否信服。

这里的问题是什么?“没有为其分配端口”:如何确定?您确定netstat正在使用的端口,或者您可以使用docker端口标志
--net=host
与容器共享主机接口。因此,如果您不启动侦听任何端口的服务,则不会“发布”任何端口,因为不需要它。如果主机接口是共享的,则
-p
标志无效,因为所有需要的端口都将直接“发布”到主机接口上。换句话说:当使用
--net=host
时,主机和容器之间的端口空间是共享的。当您使用netstat时,这些端口不应该显示出来吗?为了测试这一点,我运行了:docker run-it-rm-net container:cass1 poklet/cassandra cqlsh,没有看到“ExposedPorts”,但netstat没有显示yes和yes。您在inspect中看不到端口。但是如果它工作并且您的进程工作,netstat或lsof显示端口
sudo lsof-i | grep LISTEN
->
节点1799 199 12u IPv6 2474344980 0t0 TCP*:3443(LISTEN)
,如果我使用docker compose运行该怎么办?我试着删除端口,但没有缺少:-(不敢相信M$Windows(docker compose版本1.24.1,docker server版本19.03.2)仍然是这样),阅读手册并重申关键信息做得很好。在这里注意到这一点,真的很让人恼火,它不适用于Mac