docker-compose.yml
services:
mysql:
image: mysql:8.0
container_name: mysql-8.0
restart: always # 确保容器在退出后自动重启
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
interval: 5s
timeout: 3s
retries: 10
environment:
MYSQL_ROOT_PASSWORD: your-root-password # 设置一个强壮的root密码
MYSQL_DATABASE: your-database-name # 可选:初始化时创建的数据库
MYSQL_USER: your-user # 可选:创建一个非root用户
MYSQL_PASSWORD: your-password # 请修改密码
TZ: Asia/Shanghai # 可选:设置数据库时区
ports:
- "3306:3306" # 本地端口:容器端口映射
volumes:
- mysql-data:/var/lib/mysql # 数据持久化,防止容器删除后数据丢失
- ./conf/my.cnf:/etc/my.cnf # 可选:挂载自定义配置文件
- ./init.sql:/docker-entrypoint-initdb.d/init.sql # 初始化SQL脚本
command:
- mysqld
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --lower_case_table_names=1
- --bind-address=0.0.0.0 # 关键:确保MySQL监听所有网络接口,而不仅仅是本地回环
networks:
- mysql-network
volumes:
mysql-data: # 定义命名卷,用于数据持久化
networks:
mysql-network:
driver: bridge
如果你使用的是较旧的 MySQL 客户端连接 MySQL 8.0+ 容器,可能会遇到 caching_sha2_password 认证插件导致的连接问题。解决方案是进入容器,为相应用户更改认证插件。
$ docker exec -it mysql-8.0 mysql -u root -p
> ALTER USER 'your-user'@'%' IDENTIFIED WITH mysql_native_password BY 'your-password';
> FLUSH PRIVILEGES;
> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your-root-password';
> FLUSH PRIVILEGES;
↶ 返回首页 ↶