原文网址:Docker Compose实战系列--多个docker-compose进行网络连接_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍如何实现多个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:
custom_app_net:
name: app_net
external: true
需要进行网络连接的services加上networks配置:
services:
app:
# image:
# container_name:
# ports:
# volumes:
# environment:
networks:
- custom_app_net
纯docker可以这样做:docker xxx --net app_net
详述
1.创建中间网络
docker network create app_net
2.mysql的docker-compose.yml
version: '3.1'
services:
mysqldb:
# 启动方式
#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:
- custom_app_net
networks:
custom_app_net:
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 # 你的博客地址 (务必修改)
#- [email protected] # 证书所有者的邮箱,快过期时会提醒(务必修改)
- MAX_UPLOAD_SIZE=10m
- JVM_XMS=256m
- JVM_XMX=256m
networks:
- custom_app_net
networks:
custom_app_net:
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:
custom_app_net:
name: app_net
external: true
需要进行网络连接的services加上networks配置:
services:
app:
# image:
# container_name:
# ports:
# volumes:
# environment:
networks:
- custom_app_net
纯docker可以这样做:docker xxx --net app_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 # 你的博客地址 (务必修改)
#- [email protected] # 证书所有者的邮箱,快过期时会提醒(务必修改)
- MAX_UPLOAD_SIZE=10m
- JVM_XMS=256m
- JVM_XMX=256m
networks:
- custom_app_net
networks:
custom_app_net:
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
版权归原作者 IT利刃出鞘 所有, 如有侵权,请联系我们删除。