方式一:创建自定义网络
创建自定义网络并指定子网
docker network create --subnet=172.20.0.0/16 mysql-network
启动容器
docker run -d \ --name mysql1 \ --network mysql-network \ --ip 172.20.0.10 \ -e MYSQL_ROOT_PASSWORD=root123 \ -p 3306:3306 \ mysql:8.0
方式二:使用docker compose文件方式
version: '3.7'
services:
mysql1:
user: root
image: mysql:8.0
container_name: mysql1
ports:
- 3306:3306
volumes:
- D:/docker/app9/mysql1/data:/var/lib/mysql
- D:/docker/app9/mysql1/my.cnf:/etc/my.cnf
environment:
MYSQL_ROOT_PASSWORD: 2023
TZ: Asia/Shanghai
LANG: C.UTF-8
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p2023","--protocol","tcp"]
deploy:
replicas: 1
restart_policy:
condition: on-failure #on-failure
resources:
limits:
cpus: '8'
memory: 2G
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_german2_ci
networks:
mysql-net:
ipv4_address: 172.25.0.10
mysql2:
user: root
image: mysql:8.0
container_name: mysql2
ports:
- 3307:3306
volumes:
- D:/docker/app9/mysql2/data:/var/lib/mysql
- D:/docker/app9/mysql2/my.cnf:/etc/my.cnf
environment:
MYSQL_ROOT_PASSWORD: 2023
TZ: Asia/Shanghai
LANG: C.UTF-8
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p2023","--protocol","tcp"]
deploy:
replicas: 1
restart_policy:
condition: on-failure #on-failure
resources:
limits:
cpus: '8'
memory: 2G
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_german2_ci
networks:
mysql-net:
ipv4_address: 172.25.0.20
networks:
mysql-net:
driver: bridge
ipam:
config:
- subnet: 172.25.0.0/16
启动服务
# 启动服务
docker-compose up -d
查看状态
# 查看容器状态
docker-compose ps
# 查看日志
docker-compose logs mysql1
docker-compose logs mysql2
# 查看网络
docker network ls
停止和清理
# 停止服务
docker-compose down
# 停止并删除数据卷
docker-compose down -v
# 重新启动
docker-compose up -d
检查IP
# Linux系统命令
# 检查容器的 IP 地址
docker inspect mysql1 | grep IPAddress
docker inspect mysql2 | grep IPAddress
# Windows 等效命令
# 使用 findstr 代替 grep
docker inspect mysql1 | findstr "IPAddress"
# 或者更精确的查找
docker inspect mysql1 | findstr "IPAddress"
# 直接获取 IP 地址
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql1
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql2
# 查看容器的所有网络信息
docker inspect mysql1
# 或者使用更简洁的方式
docker container inspect mysql1 --format='{{.Name}} - {{.NetworkSettings.Networks.mysql-cluster_mysql-net.IPAddress}}'
完整的排查步骤(Windows 版本)
# 1. 检查容器状态
docker ps
# 2. 获取容器 IP 地址
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql1
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql2
# 3. 检查网络配置
docker network ls
docker network inspect mysql-cluster_mysql-net
# 4. 检查端口映射
docker port mysql1
docker port mysql2
# 5. 测试容器内部连接
docker exec mysql1 mysql -uroot -proot123 -e "SELECT 1;"
docker exec mysql2 mysql -uroot -proot123 -e "SELECT 1;"
# 6. 检查用户权限
docker exec mysql1 mysql -uroot -proot123 -e "SELECT user, host, plugin FROM mysql.user;"
docker exec mysql2 mysql -uroot -proot123 -e "SELECT user, host, plugin FROM mysql.user;"