【问题标题】:Docker containers: curl between containers not workingDocker容器:容器之间的卷曲不起作用
【发布时间】: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


【解决方案1】:

似乎在 test-01.docker 中运行的应用程序在侦听 127.0.0.1,因此该容器外的任何其他程序都无法访问它

让您的应用(在 test-01.docker 内)监听 0.0.0.0 地址并重试

【讨论】:

  • 你是对的。这就是问题所在。如何将其更改为在 0.0.0.0 而不是 127.0.0.1 上收听?
  • 这不是关于docker的事情,我想在告诉你怎么做之前我需要知道应用程序是什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 2020-01-07
  • 2021-10-10
  • 2020-07-13
相关资源
最近更新 更多