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

时间:2019-12-30 11:00:41

标签: linux 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.

1 个答案:

答案 0 :(得分:1)

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

docker exec xyz wget 127.0.0.1:5000

如果可以,则说明端口暴露有问题,否则,容器中没有运行Web服务器。

还有你得到的错误

Read error (Connection reset by peer) in headers.

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