首页 > 解决方案 > 如何在 Docker Compose 中连接不同网络中的容器?

问题描述

---
version: '3.7'

networks:
  sydney:
    name: sydney
  london:
    name: london

services:
  sydney-service:
    image: whatever
    hostname: sydney-service
    container_name: sydney-service
    networks:
      - sydney

  london-service:
    image: whatever
    hostname: london-service
    container_name: london-service
    environment:
      PAIR_SERVER: sydney-service:8080 # doesn't work
    networks:
      - london

我在 docker compose 文件中有多个网络。由于不同的服务位于不同的网络中,它们彼此看不到。如何将一个网络中的一项服务连接到另一个网络中的另一项服务?

谢谢!

标签: dockerdocker-compose

解决方案


您可以通过将它们放在同一个网络中来连接它们。这就是 docker 中网络的目的,也是通过 docker 网络连接 docker 容器的先决条件之一。

您可以在多个网络中拥有一个容器,这可能会解决您面临的问题:

version: '3.7'

networks:
  sydney:
    name: sydney
  london:
    name: london
  global:

services:
  sydney-service:
    image: whatever
    hostname: sydney-service
    container_name: sydney-service
    networks:
      - sydney
      - global

  london-service:
    image: whatever
    hostname: london-service
    container_name: london-service
    environment:
      PAIR_SERVER: sydney-service:8080 # doesn't work
    networks:
      - london
      - global

另一种选择是绕过容器网络,并在发布的端口上与其他服务通信。在这种情况下,主机名是 docker 主机,端口是发布端口而不是容器端口。如果您的目的是能够在使用 compose 文件部署的容器之间进行通信,我建议您不要这样做。


推荐阅读