我正在运行一个由docker-container启动的容器,如下所示:
puppetboard:
build: ./images/puppetboard
image: puppet/puppetboard
ports:
- 5000:5000
links:
- puppetdb:puppetdb
它成功构建,当我运行docker ps
时,我可以看到:
0.0.0.0:5000->5000/tcp
我甚至可以使用docker exec
进入容器并使用curl localhost:5000
返回一个html页面。
我仔细检查主机是否可以通过nmap 127.0.0.2
在127.0.0.2 (docker network)上看到端口5000,并且端口可用:5000/tcp open upnp
。
然而,当我在主机上的浏览器中访问127.0.0.2:5000
时,网站无法使用。如何调试此网络问题?
curl 127.0.0.2:5000
&的结果curl 127.0.0.1:5000
是:curl: (56) Recv failure: Connection reset by peer
。
答案 0 :(得分:5)
127.0.0.x是一个环回地址。要将容器中的端口发布到主机,您需要侦听容器中的所有接口。因此,您需要确保容器内的应用程序配置为侦听0.0.0.0:5000(这与在docker compose文件中发布端口的选项不同。)
答案 1 :(得分:3)
正如我们在此room中讨论的那样,您必须确保容器化应用程序侦听容器内的所有接口。在puppet board的情况下,config看起来像:
DEV_LISTEN_HOST = '0.0.0.0'
0.0.0.0用于说"所有接口"