近期将应用容器化的过程中,由于多个不同的Docker Compose容器需要共用一个Mysql实例,并限制外部访问。 以下为最终解决方案。
1. docker创建公共network
sudo docker network create mysql-shared
2. compose内添加external netwrok
- DB容器以及需要连接到数据库的容器都添加
services:
app:
networks: # 显式添加Network
- mysql-shared
networks:
mysql-shared: # 声明外部网络
external: true
name: mysql-shared
3. DB compose内添加hostname
services:
db:
hostname: "db.test.local"
4. 应用容器内使用db hostname获取地址
举例:Golang内使用
username:password@tcp(db.test.local:3306)/app-db?parseTime=true
连接到Mysql