我正在尝试在端口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/