【问题标题】:How to communicate between two seprate docker containers via “localhost"?如何通过“localhost”在两个独立的 docker 容器之间进行通信?
【发布时间】:2021-01-06 14:30:05
【问题描述】:

您好,我在两个独立的 docker 容器之间进行通信时遇到问题。 一个是烧瓶应用程序,它在端口 5000 上运行(端口暴露给本地,从本地主机我可以通过 http://localhost:5000/api 访问这个烧瓶应用程序)但是还有另一个反应应用程序 docker 容器在端口 3000 上运行问题是我需要点击烧瓶 api,每当我尝试从容器内部向 http://localhost:5000/api 发出请求时,它都不允许我这样做。 有什么帮助吗?

这里是 react app 的 docker-compose 文件 版本:'3'

services:

  react-cms:
      tty: true 
      build: .
      ports: 
          - "8080:3000"

这是 Flask 应用的 compose 文件

version: '3'

services:

  video_service:

    build: video_service/.
    
    ports: 
        - 5001:5000

【问题讨论】:

  • 你不需要在每个容器上暴露两个端口吗?
  • 你能展示你的 docker-compose 文件吗?
  • @ThatGuyKev 我已经用撰写文件更新了问题。
  • @AleksanderBobiński 是的,我已经暴露了端口。
  • 因为每个容器都有自己的命名空间,主机上的 localhost 与容器内的 localhost 不同。试试 http://:5000/

标签: docker docker-compose docker-container


【解决方案1】:

如果您将 'video_service' 依赖项添加到具有 'react-cms' 的 docker-compose 中,则意味着 video_service 容器不再能够维持其自己的生命周期(如果您愿意的话),因为 docker-compose down for react-cms 也会关闭 video_service 容器。

我会做什么,按原样运行 viedoe_service 和 react-cms(这意味着不同的 docker-compose),但将两个容器保持在同一个网络上。因此,react-cms 可以对 viedoe_service 进行 api 调用。请访问docker文档页面https://docs.docker.com/compose/networking/

但这就是我要做什么的想法,

第 1 步:像这样将网络添加到 viedoe_service 级别,

networks: 
      - my_react_video_service_network

然后像这样在服务级别声明和定义网络,

networks: 
  my_react_video_service_network: 
    name: my_react_video_service_network

第 2 步:从 react-cms 连接到 my_react_video_service_network。像这样添加到服务级别,

networks:
  default:
    external:
      name: my_react_video_service_network

所以,现在你的 react-service 容器和 video_service 容器在同一个网络上运行,因此,react-service 应该能够使用 video_service api。

【讨论】:

    【解决方案2】:

    如果您希望 react-cms 访问视频服务,您需要将其包含在您的 docker-compose 文件中。

      react-cms:
        depends_on: 
          - video_service
        environment: 
          - VIDEO_SERVICE_URI=video_service/api
    

    那么就可以通过环境变量访问服务了

    【讨论】:

    • 嗨,谢谢你的回答,我会试试这个,但是,如果我按照你说的做,我会混淆 video_service 是在单独的容器中创建和运行的,这不会导致任何问题吗?
    • 是的,它应该可以正常运行,但是,您可能会遇到其他相关问题。从我看到你正在实现类似微服务的系统来看,这种方法总是对我有用。无论如何,如果它不起作用,请在 cmets 中告诉我。
    • 抱歉打错了,我只是在你的代码中添加了几行,我会编辑一下
    • 你是说你有多个 'docker-compose' 文件?
    • 当然,我们开始吧
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 2016-09-05
    • 2015-08-13
    • 2018-01-28
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多