我正在尝试在端口5555上运行一个Docker容器,该镜像是在Dockerfile中使用EXPOSE 5555构建的,并且我正在如下运行容器

$ docker run -d --name controler -p 5555:5555  -v /var/run/docker.sock:/var/run/docker.sock --net=host  my_image:latest

容器启动正常,但端口未暴露,正在运行的docker端口返回错误消息
$ docker port controler 5555
Error: No public port '5555/tcp' published for controler

如果我在不使用--net=host的情况下运行容器,则端口将暴露出来,我可以访问该容器。

任何关于这里真正发生的事情的想法或暗示都值得赞赏。

最佳答案

--net=host选项

该选项将容器的虚拟NIC绑定(bind)到主机物理NIC(通过完全访问本地系统服务(例如D-bus))。

使用此选项时,主机会从物理NIC授予每个请求网络套接字的程序。然后,您的服务将按预期使用5555端口。
-p 5555:5555选项

此选项(通过类似iptable的机制)将网络套接字containter-ip:5555绑定(bind)到网络套接字host-ip:5555

换一种说法

恕我直言,同时使用它们似乎有点不合逻辑。如果需要将容器化的服务发布到套接字host-ip:5555,则最简单的方法是使用-p 5555:5555选项将仅作为

关于docker - docker 不向网络主机公开端口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38888084/

10-12 15:32