Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何访问docker容器中暴露的端口?_Linux_Docker - Fatal编程技术网

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

Linux 如何访问docker容器中暴露的端口?,linux,docker,Linux,Docker,以上输出显示端口5000已暴露,我希望如此 $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ae87d83af7d3 442c97a73937 "/bi

以上输出显示端口5000已暴露,我希望如此

$ 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
现在,当我从主机执行以下操作时:

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.
如果它可以工作,那么您就有端口暴露问题,否则,您的容器中就没有运行web服务器

你得到的错误是什么

docker exec xyz wget 127.0.0.1:5000

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

wget-c 127.0.0.1:5000如何?请参阅编辑@KamilCukSo成功了,你接通了。而且?从您所展示的情况来看,xyz容器没有运行服务器,它运行的是bash,因此,无论您是否有暴露的端口,到它的网络连接都将失败。如果它运行的不是交互式shell,那么您需要提供一个示例来演示这一点。除非您在一个非常特定的Docker/host OS配置上,否则Docker inspect IP地址不可用,您不应该查找它。@KamilCuk它显示读取错误。这是什么意思?谢谢你的回复。我应该在容器内手动运行Web服务器吗?如果使用docker run运行它,那么应该手动运行,或者在Dockerfile中写入CMD。如果您使用docker compose,它通常使用docker-compose.yaml编写。查看图片开发人员的文档,应该了解一些相关信息。或者,如果是您的图像,请将ENTRYPOINT或CMD添加到Dockerfile中
docker exec xyz wget 127.0.0.1:5000
Read error (Connection reset by peer) in headers.