繁体   English   中英

如何访问从 docker 容器暴露的端口?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM