如何使Docker Compose服务使用多个网络

时间:2019-09-04 06:10:51

标签: docker networking docker-compose

每个人,我都需要编写一个docker-compose.yml,该文件需要使一项服务使用两个网络,一个用于默认情况下彼此通信的服务,另一个用于外部网桥网络以进行自动自我发现。通过nginx-proxy。

我的docker-compose.yml如下。

version: '2'
services:
  dns-management-frontend:
    image: ......
    depends_on:
    - dns-management-backend
    ports:
    - 80
    restart: always
    networks:
      - default
      - bridge
  dns-management-backend:
    image:......
    depends_on:
    - db
    - redis
    restart: always
    networks:
      - default
  db:
    image: ......
    volumes:
    - ./mysql-data:/var/lib/mysql
    restart: always
    networks:
      - default
  redis:
    image: redis
    ports:
    - 6379
    restart: always
    networks:
      - default
networks:
  default:
  bridge:
    external:
      name: bridge
    networks:
      - default

当我开始使用它时,它给了我network-scoped alias is supported only for containers in user defined networks错误。我必须删除服务中的“网络”部分,并在启动后手动运行docker network connect <id_of_frontend_container> bridge以使其正常工作。

关于如何在docker-compose中配置多个网络的任何建议?我也读过https://docs.docker.com/compose/networking/,但这太简单了。

2 个答案:

答案 0 :(得分:1)

名为bridge is special的Docker网络;最值得注意的是,它不提供基于DNS的服务发现。

对于您的代理服务,您应该docker network create bridge以外的其他名称的网络,或者是docker network connect现有容器的容器,或者重新启动代理--net the_new_network_name。在docker-compose.yml文件中,将external: {name: ...}更改为新的网络名称。

  

关于如何在docker-compose中配置多个网络的任何建议吗?

正如您所指出的那样,Docker Compose(因此也适用于Docker)不支持特别涉及的网络拓扑。在Compose运作良好的六个容器范围内,您实际上并不需要涉及的网络拓扑。使用Docker Compose为您提供的default网络,除非实际必要,否则不要手动配置networks:(因为外部代理在您的问题中)。

答案 1 :(得分:0)

您暂时无法将默认网桥与compose中的其他网络混合

issue仍处于打开状态...