每个人,我都需要编写一个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/,但这太简单了。
答案 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仍处于打开状态...