【问题标题】:Docker, Communicate Two Containers Different Hosts Same NetworkDocker,通信两个容器不同的主机同一个网络
【发布时间】:2022-07-06 21:14:19
【问题描述】:

大家早上好

我正在使用 docker 进行一些测试,但遇到了一个问题,我没有找到针对同一案例的解决方案。

在我的部署中,我希望服务器和客户端进行通信,到目前为止,它们在不同的容器中但在同一主机上。在客户端,我使用了服务器的私有 IP,一切正常,这里我展示了 compose:

服务器:

   version: "3.3"
services:
  app:
    image: python-server:ARM
    ports:
      - 8080:8080

客户:

  version: "3.3"
services:
  app:
    image: python-client:ARM
    ports:
      - 5040:5040
    volumes:
      - /dataf/1.csv:/app/1.csv:ro
networks:
  default:
    external:
      name: server_default

但是,当尝试在两台不同的主机上进行这种通信时[例如,一台在我的主机上,一台在虚拟机上,都在同一个网络上],这会失败。我怀疑 yaml 应该是什么样子以便客户端和服务器可以相互通信

【问题讨论】:

    标签: docker networking docker-compose docker-machine


    【解决方案1】:

    在大多数情况下,Docker 网络是特定机器的本地网络。您也许可以设置overlay network,但这是一个高级设置,使用 Kubernetes 之类的集群感知容器编排器可能会更好地为您提供服务,而不是尝试手动设置。

    由于两个服务都发布ports:,因此您可以从一台机器调用另一台机器的DNS名称和第一个发布的ports:号码。

    # client/docker-compose.yml
    services:
      client:
        environment:
          SERVER_URL: http://server-host.example.com:8080
    

    您不需要在这里进行特殊的networks: 设置,同样您不能在不同主机上的两个容器之间共享 Docker 网络。此设置实际上并不关心服务器是否在容器中运行,或者该 URL 是否指向转发给它的代理。

    请注意,我已在环境变量中配置了 URL。您需要更新您的代码以兑现这一点。在这种多主机设置中,或者在单主机 Compose-native 设置中,或者如果您在没有 Docker 的情况下并排运行两个进程,或者如果您最终采用 Kubernetes,则 URL 会有所不同。

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 2020-04-17
      • 2016-07-02
      • 2022-01-21
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多