Docker Compose Container 之前相互通信

因 links 属性已被废弃,官方建议使用 networks 来将几个 container 划分至一个网络,从而实现 container 之间互通。

创建一个桥接网络

docker network create YOUR_NET_NAME 默认网络方式即为桥接 YOUR_NET_NAME为你自定义的网络名称

修改docker-compose.yml文件

  1. YOUR_NET_NAME网络添加到 container 配置中
  2. 在与services同级的 networks 配置中,添加 YOUR_NET_NAMEexternal: true,如:

openresty/docker-compose.yml

 1version: "3"
 2
 3services:
 4  openresty:
 5    container_name: openresty
 6    image: openresty/openresty
 7    restart: always
 8    networks:
 9      - YOUR_NET_NAME
10    volumes:
11      - ./conf:/usr/local/openresty/nginx/conf
12      - ./web:/web
13    ports:
14      - "80:80"
15      - "443:443"
16
17networks
18  YOUR_NET_NAME:
19    external: true

重新加载配置 docker-compose up -d

mariadb/docker-compose.yml

 1version: "3"
 2
 3services:
 4  mariadb:
 5    container_name: mariadb
 6    image: mariadb
 7    restart: always
 8    networks:
 9      - YOUR_NET_NAME
10    environment:
11      MYSQL_ROOT_PASSWORD: root
12    volumes:
13      - ./data:/var/lib/mysql
14      - ./conf/my.cnf:/etc/mysql/my.cnf
15    ports:
16      - "13306:3306"
17
18networks
19  YOUR_NET_NAME:
20    external: true

重新加载配置 docker-compose up -d

注意:networks 中必须设置 external 为 true,否则无法正常通信

完成

openresty 和 mariadb 现在可以互通了! 在 openresty 中,可以直接通过 mariadb:3306 来访问 mariadb 数据库