我正在尝试首次使用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"
有人具有正确的配置以同时连接到已定义的网络和现有网络吗?
答案 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文档中所见: