连接到多个网络-现有一个

时间:2019-01-21 09:36:17

标签: docker docker-compose

我正在尝试首次使用docker-compose。我希望我的容器连接到两个网络,一个在docker-compose文件中定义,另一个已经存在,但是我正在努力使其工作。

我找到了这些docs,并得到了以下配置:

haproxy:
        container_name: haproxy
        links:
            - 'mysql1:mysql1cl'
            - 'mysql2:mysql2cl'
        volumes:
            - '/docker-data/configs/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro'
        ports:
            - '33060:3306'
            - '38080:8080'
        image: 'haproxy:latest'
        networks:
            - athenanet
            - external:
                name: bridge

但这给了我以下错误:

services.haproxy.networks contains {"external": "bridge"}, which is an invalid type, it should be a string

因此,我尝试按原样使用默认网络,并最终获得以下配置:

haproxy:
        container_name: haproxy
        links:
            - 'mysql1:mysql1cl'
            - 'mysql2:mysql2cl'
        volumes:
            - '/docker-data/configs/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro'
        ports:
            - '33060:3306'
            - '38080:8080'
        image: 'haproxy:latest'
        networks:
            - athenanet
            - bridge

但是随后我遇到以下错误:

ERROR: Service "haproxy" uses an undefined network "bridge"

有人具有正确的配置以同时连接到已定义的网络和现有网络吗?

2 个答案:

答案 0 :(得分:1)

您快到了。您必须在Compose文件的顶层而不是在服务下定义外部网络。因此,将其放到撰写文件的根目录:

networks:
  mynetwork:
    external:
      name: my-pre-existing-network-name

然后在您的haproxy服务下使用网络:

haproxy:
        ...
        networks:
            - mynetwork

您可以在此处查看文档:{​​{3}}。

答案 1 :(得分:0)

我看到几件事:

根据第一个docker-compose文件,您必须区分docker-compose服务中的网络定义和使用情况。 在docker-compose服务中(haproxy:部分),在这种情况下,您应仅使用docker-network name = athenanet。 所有属性(例如外部属性)都必须在以下网络中定义:部分,外部服务部分。看看这个:

haproxy:
  container_name: haproxy
  links:
    - 'mysql1:mysql1cl'
    - 'mysql2:mysql2cl'
  volumes:
    - '/docker-data/configs/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro'
  ports:
    - '33060:3306'
    - '38080:8080'
  image: 'haproxy:latest'
  networks:
    - athenanet

networks:
  athenanet:
    external:
      name: <external-docker-network-name>

第二,强烈建议不要对Docker网络名称使用保留关键字。在第二个docker-compose中,您尝试使用两个网络:athenanet和bridge,而bridge是可能的类型之一,如在docker文档中所见:

https://docs.docker.com/network/