【发布时间】:2017-01-18 02:52:59
【问题描述】:
我在同一个网络中有多个 docker 容器。我正在尝试在 containerA 上使用 curl 从 test01.docker container 上的 API 获取结果。
我在容器 A 上运行此命令:
curl -s test-01.docker:8031/app?status -v
输出如下:
* Hostname was NOT found in DNS cache
* Trying 172.19.0.24...
* connect to 172.19.0.24 port 8031 failed: Connection refused
* Failed to connect to test-01.docker port 8031: Connection refused
* Closing connection 0
当我尝试使用以下命令从 containerA ping test01.docker 时:
ping test-01.docker
成功了。
当我执行 docker ps 时,它会显示以下信息。在我的
43823212be7e mytestimage "/docker-entrypoint.s" 53 seconds ago Up 47 seconds 22/tcp, 2812/tcp, 5060-5061/tcp, 6970-6971/tcp, 8002/tcp, 8030-8031/tcp, 8033/tcp, 8071/tcp, 8888/tcp, 9020-9023/tcp containerA
这表明端口 8031 已暴露。我无法弄清楚为什么 curl 在这方面失败了。当我在 test-01.docker 上运行以下命令时,它给了我正确的输出:
curl -s localhost:8031/app?status
不知道为什么它不能在同一网络中的其他容器上工作。如果我遗漏了什么,请告诉我。
更新:我的 docker-compose 文件如下所示:
version: '2'
services:
test-01.docker:
image: ##############
expose:
- 22
- 2812
- 8031
hostname: test-01
domainname: docker
【问题讨论】:
-
仅仅是因为 docker 容器不是实际上在您的内部 docker 网络上的端口 8031 上侦听。端口 8031 通过与 docker 容器用于相互通信的接口不同的接口暴露给您的主机。
-
你能分享 Dockerfiles / docker-compose.yml 吗?
-
@ffledgling 如何通过与 docker 容器相同的接口将端口 8031 暴露给我的主机?
-
@clever_bassi 正如 JHarris 所说,请向我们提供有关您的应用程序和 docker 设置的更多信息。什么是应用程序?它是如何配置的?你的 docker 配置是什么?
标签: curl networking docker ports