简介
说明
本文介绍如何实现多个docker-compose的通信。
需求场景
docker compose中,1个docker-compose.yml就是1个应用。默认情况下,单个docker-compose.yml中的services下的容器是可以进行网络连接的。
多个docker-compose.yml中的services下的容器是无法进行网络连接的,让多个应用进行网络连接的方法:指定一个中间网络,让这两个应用都连接到这个中间网络。
本文要达到的目的
2个docker compose:一个数据库和一个app(halo),它们要进行网络连接。
情景1:新建多个docker compose
概述
1. 建立中间网络
docker network create app_net
2. 每个docker-compose.yml连接到中间网络
一级配置都加上如下配置:
networks: external_net_1: name: app_net external: true
需要进行网络连接的services加上networks配置:
services: app: # image: # container_name: # ports: # volumes: # environment: networks: - external_net_1
纯docker可以这样做:docker xxx –net app_net
备注:
也可以使用默认网络,这样services里边就不需要指定了,如下:
version: '3.1' services: # ... networks: default: name: my-net external: true # 也可以这么写: # networks: # default: # external: # name: my-net
详述
1.创建中间网络
docker network create app_net
2.mysql的docker-compose.yml
version: '3.1' services: mysql: # 启动方式 #restart: unless-stopped # 镜像 image: mysql:8.0 # 容器名字 container_name: mysql8 privileged: true environment: # 时区 TZ: Asia/Shanghai # root用户的密码 MYSQL_ROOT_PASSWORD: 123456 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true ports: - 3306:3306 volumes: - /work/db/mysql8/log:/var/log/mysql - /work/db/mysql8/data:/var/lib/mysql - /work/db/mysql8/conf:/etc/mysql/conf.d networks: - external_net_1 networks: external_net_1: name: app-net external: true
3.app的docker-compose.yml
version: '3.1' services: halo: # 启动方式 #restart: unless-stopped # 镜像 image: halohub/halo:1.6.0 # 容器名字 container_name: halo1.6.0 ports: - 8090:8090 volumes: - /work/app/halo/config/:/root/.halo environment: - VIRTUAL_PORT=8090 #- VIRTUAL_HOST=localhost # 你的博客地址(务必修改) #- LETSENCRYPT_HOST=localhost # 你的博客地址 (务必修改) #- LETSENCRYPT_EMAIL=i@example.com # 证书所有者的邮箱,快过期时会提醒(务必修改) - MAX_UPLOAD_SIZE=10m - JVM_XMS=256m - JVM_XMX=256m networks: - external_net_1 networks: external_net_1: name: app-net external: true
app中直接将ip换成mysql的容器名字,例如:
spring: datasource: # MySQL database configuration. driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://mysql8:3306/dbName?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: user1 password: 123456
情景2:1个docker compose容器已存在
本处假设mysql8这个容器已经存在了。
概述
1. 建立中间网络
docker network create app_net
2.将mysql8连接到中间网络
docker network connect app_net mysql8
3. app的docker-compose.yml连接到中间网络
一级配置都加上如下配置:
networks: external_net_1: name: app_net external: true
需要进行网络连接的services加上networks配置:
services: app: # image: # container_name: # ports: # volumes: # environment: networks: - external_net_1
纯docker可以这样做:docker xxx –net app_net
备注:
也可以使用默认网络,这样services里边就不需要指定了,如下:
version: '3.1' services: # ... networks: default: name: my-net external: true # 也可以这么写: # networks: # default: # external: # name: my-net
详述
1.创建中间网络
docker network create app_net
2. 将mysql8连接到中间网络
docker network connect app_net mysql8
3.app的docker-compose.yml
version: '3.1' services: halo: # 启动方式 #restart: unless-stopped # 镜像 image: halohub/halo:1.6.0 # 容器名字 container_name: halo1.6.0 ports: - 8090:8090 volumes: - /work/app/halo/config/:/root/.halo environment: - VIRTUAL_PORT=8090 #- VIRTUAL_HOST=localhost # 你的博客地址(务必修改) #- LETSENCRYPT_HOST=localhost # 你的博客地址 (务必修改) #- LETSENCRYPT_EMAIL=i@example.com # 证书所有者的邮箱,快过期时会提醒(务必修改) - MAX_UPLOAD_SIZE=10m - JVM_XMS=256m - JVM_XMX=256m networks: - external_net_1 networks: external_net_1: name: app-net external: true
app中直接将ip换成mysql的容器名字,例如:
spring: datasource: # MySQL database configuration. driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://mysql8:3306/dbName?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: user1 password: 123456
请先
!