我正在尝试运行一个侦听端口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 port会返回错误消息
$ docker port controler 5555
Error: No public port '5555/tcp' published for controler
如果我在没有--net=host
的情况下运行容器,则会显示端口,我可以访问容器。
对于这里真正发生的事情的任何想法或提示都表示赞赏。
注意:我正在使用最新的docker for mac beta版本1.12.0-beta21 (建立:11019)在我的mac上运行el capitan
答案 0 :(得分:8)
--net=host
选项此选项将容器的虚拟NIC绑定到主机物理网卡(通过提供对本地系统服务(如D-bus)的完全访问权限。)
当使用此选项时,主机将从物理网卡中为每个请求网络套接字的程序授予一个程序。然后,您的服务将按预期使用5555
端口。
-p 5555:5555
选项此选项将网络套接字iptable
绑定(通过containter-ip:5555
- 类似机制)到网络套接字host-ip:5555
。
看来,恕我直言,两者都使用它们有点不合逻辑。如果需要将容器化服务发布到套接字host-ip:5555
,那么最简单的方法是仅使用-p 5555:5555
选项。
答案 1 :(得分:-1)
在jdbc url中添加您的IP spring.datasource.url = jdbc:postgresql://12.45.67.12:5432 / postgres
将此conf添加到pg_hba.conf文件中 托管所有0.0.0.0/0 md5`
这个conf正在为我工作