![](/img/trans.png)
[英]Can't access publicly exposed Docker container port from external machine, only from localhost?
[英]How to access a port exposed from a docker container?
$ docker container ls --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}" -a
CONTAINER ID NAMES PORTS
ae87d83af7d3 hopeful_engelbart
d13e260c4dec unruffled_bouman
db2c482de210 jenkinsci 0.0.0.0:8080->8080/tcp, 50000/tcp
cd201cbd413e xyz 0.0.0.0:5000->5000/tcp
c64c32ac68b8 pqr
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae87d83af7d3 442c97a73937 "/bin/bash" 11 minutes ago Exited (0) 9 minutes ago hopeful_engelbart
d13e260c4dec 442c97a73937 "/bin/bash" 27 minutes ago Exited (0) 24 minutes ago unruffled_bouman
db2c482de210 jenkins/jenkins:lts "/sbin/tini -- /usr/…" 3 days ago Up 41 minutes 0.0.0.0:8080->8080/tcp, 50000/tcp jenkinsci
cd201cbd413e 442c97a73937 "bash" 3 days ago Up 7 minutes 0.0.0.0:5000->5000/tcp xyz
c64c32ac68b8 442c97a73937 "bash" 3 days ago Exited (0) 2 days ago pqr
上面的输出表明端口 5000 已经暴露(我希望如此)。
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' xyz
172.17.0.3
现在当我从主机上做:
wget -c 172.17.0.3:5000
--2019-12-30 16:26:44-- http://172.17.0.3:5000/
Connecting to 172.17.0.3:5000... failed: Connection refused.
既然它被暴露并且容器正在运行,那么访问该端口的方法是什么?
$ wget -c localhost:5000
--2019-12-30 16:41:57-- http://localhost:5000/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:5000... connected.
HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.
--2019-12-30 16:41:58-- (try: 2) http://localhost:5000/
Connecting to localhost (localhost)|127.0.0.1|:5000... connected.
HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.
首先,检查您是否有应用程序,侦听容器内的端口。 只需尝试从您的容器连接到它:
docker exec xyz wget 127.0.0.1:5000
如果它可以工作,那么您的端口公开有问题,否则,您的容器内没有运行 Web 服务器。
你得到的错误
Read error (Connection reset by peer) in headers.
似乎指向您的 Web 服务器中的问题,而不是连接问题。
我在使用 Docker 运行一个 Quarkus 应用程序时遇到了这个问题。
我在 forum.dockers 上发现了这个话题,讨论了一个类似的问题。
在这个话题中说:
我使用的是flask,默认情况下它绑定到localhost & 5000,所以你必须指定:app.run(host=“0.0.0.0”)
所以,就我而言,我猜问题出在我的应用程序上,而不是在 Docker 网络上。
我在 Java 命令上添加了这个属性,以便在我的 Dockerfile 上启动我的应用程序,一切正常:
-Dquarkus.http.host=0.0.0.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.