【问题标题】:Is it possible to curl across docker network via docker-compose between 2 docker-compose.yaml?是否可以在 2 个 docker-compose.yaml 之间通过 docker-compose 在 docker 网络上卷曲?
【发布时间】:2019-08-20 23:13:20
【问题描述】:

我有 2 个应用程序在不同的网络上运行,它使用单独的 docker-compose.yaml。所以我尝试从应用 A 向应用 B 调用请求,但它不起作用。

docker exec -it app_a_running curl http://localhost:8012/user/1

所以我遇到了一个错误

cURL error 7: Failed to connect to localhost port 8012

docker-compose-app-a.yaml

version: "3"

services:
  app:
    build: go/
    restart: always
    ports:
    - 8011:8011
    volumes:
    - ../src/app:/go/src/app
    working_dir: /go/src/app
    container_name: app-a
    command: sleep 72000
    networks:
    - app-a-network

networks:
  app-a-network:

docker-compose-app-b.yaml

version: "3"

services:
  app:
    build: go/
    restart: always
    ports:
    - 8012:8012
    volumes:
    - ../src/app:/go/src/app
    working_dir: /go/src/app
    container_name: app-b
    command: sleep 72000
    networks:
    - app-b-network

networks:
  app-b-network:

问题:

  • 可以这样做吗?
  • 如果第一个问题是可能的,请给我建议:)

【问题讨论】:

  • 可以使用 curl,错误本身表明 curl 尝试连接成功但端口已关闭。一件事虽然你不能使用 localhost 来尝试卷曲不同的容器。
  • 如果它解决了您的问题,请接受答案。将来会帮助其他人。

标签: docker docker-compose docker-networking docker-network


【解决方案1】:

您可以在 docker 容器上使用 curl。您的 curl 命令不起作用的原因可能是您没有发布 docker 容器的端口。例如,尝试:

docker run -d -p 8080:8080 tomcat

而不是

docker run -d tomcat

这会将您机器的 8080 端口转发到容器的 8080 端口。

如果您有容器的外壳,则可以使用服务名称或容器名称来 curl Docker 网络上的容器,前提是您的目标存在于相同的网络中。

【讨论】:

  • 我已经完成了 docker-compose 下面是我运行 docker ps app_a port 0.0.0.0:80 network a, app_b 0.0.0.0:8080 network b 时的结果
  • @ALTELMA:您能否编辑您的问题以包含您的 docker-compose 文件和docker ps 命令的结果?
  • 我已经更新了我的问题并分享了一些 docker-compose.yaml。无论如何,我认为这可能是不可能的。 . .
  • @ALTELMA:您正试图在端口 8012 处卷曲“应用程序 A”。但是,据我所知,应用程序 A 在端口 8011 上运行。它是在端口 8012 上运行的“应用程序 B”。
  • 是的,我尝试从 App A 端口 8011 卷曲到 App B 端口 8012。这可能吗?
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2020-08-09
相关资源
最近更新 更多