Docker构成不暴露应用程序容器的端口

时间:2016-01-06 02:02:54

标签: docker docker-compose

我在我的应用程序容器的dockerfile.yml中暴露了端口80以及在我的docker-compose.yml中映射“80:80”但是在我执行“docker-compose up”之后我只得到了“Connection refused”并尝试在我的docker-machine的IP地址上的端口80上进行HTTP GET。我的docker hub提供了RethinkDB实例的管理面板通过相同的dockerfile.yml(“EXPOSE 8080”)和docker-compose.yml(端口“8080:8080”)进行了很好的映射,当我在本地开发机器端口上启动应用程序时80按预期暴露出来。

这里可能出现什么问题?我非常感谢任何拥有更多码头工作经验的人的快速见解!

4 个答案:

答案 0 :(得分:2)

所以在我的情况下,我的服务容器都绑定到localhost(127.0.0.1),因此看起来暴露的端口从未通过我的docker-compose端口映射获取。我将我的服务配置为分别绑定到0.0.0.0,现在它们可以完美地工作。谢谢@creack指出我正确的方向。

答案 1 :(得分:0)

如果您使用相同的Dockerfile,请确保您还公开了端口80 EXPOSE 80,否则您的撰写映射80:80将无效。 还要确保您的http服务器侦听0.0.0.0:80而不是localhost或其他端口。

答案 2 :(得分:0)

就我而言,我发现我要设置的服务的所有网络均为internal: true。奇怪的是,在进行docker stack deploy

时没有给我一个问题

我已经打开https://github.com/docker/compose/issues/6534来询问正确的错误消息,这样对其他人来说很明显。

答案 3 :(得分:0)

我使用的是

const clonedData = [...yourData]; // use {} if it's an object

显然

docker-compose run命令不会创建服务配置中指定的任何端口。

请参见https://docs.docker.com/compose/reference/run/

我开始使用

docker-compose run app

问题解决了。