docker network 桥接多个 docker 容器服务
场景:
假如有多个服务:mysql、 web1、web2、web3...等等,及后续未知的站点加入。创建 docker-compose.yaml
文件时,不可能每次有新的站点,都要修改一次 docker-compose.yaml
文件及再次 down
和 up
。
比如:
version: '3'
services:
mysql:
image: mysql
container_name: mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 123456
web1:
image: adminer
container_name: adminer
restart: unless-stopped
ports:
- 8080:8080
web2:
image: phpmyadmin
container_name: phpmyadmin
restart: unless-stopped
environment:
- PMA_ARBITRARY=1
ports:
- 8081:80
...
这种情况,我们就只希望先创建一个 mysql 服务。再有新的站点需要使用 mysql 服务时,新站点的可以直接使用 host 为 mysql
方式连接到 mysql 服务。
方案
1、先创建一个 mysql 服务:
version: '3'
services:
mysql:
image: mysql
container_name: mysql
restart: unless-stopped
hostname: mariadb
environment:
MYSQL_ROOT_PASSWORD: 123456
networks:
- db
networks:
db:
name: mysql
说明:
在 mysql 的服务下添加
networks:
- db
以及在顶级添加一个 networks 服务:
networks:
db:
name: mysql
2、添加新的 web 服务
version: '3'
services:
adminer:
image: adminer
container_name: adminer
restart: unless-stopped
ports:
- 8080:8080
networks:
- db
networks:
db:
name: mysql
说明:
跟上一个步骤一样,添加 networks 选项即可。往后需要添加的 web 服务,若需要使用 mysql 服务,都是如此。
注意: name
选项必须填入,且一致。否则容器不可互通。也可以先创建一个 network,再使用亦可。如下:
1、创建一个 network:docker network create db
2、顶级的 networks 服务修改为:
networks:
db:
external: true
更多说明可参考文档:https://docs.docker.com/compose/compose-file/compose-file-v3/#external-1