首页 > 解决方案 > 如何访问从 docker 容器暴露的端口?

问题描述

$ 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.

标签: linuxdocker

解决方案


首先,检查您是否有一个应用程序,正在侦听容器内的端口。只需尝试从您的容器连接到它:

docker exec xyz wget 127.0.0.1:5000

如果它可以工作,那么你的端口暴露有问题,否则,你的容器内没有运行 Web 服务器。

你得到的错误

Read error (Connection reset by peer) in headers.

似乎指向您的 Web 服务器中的问题,而不是连接问题。


推荐阅读