为什么需要密码
1. 容器重启时会重新初始化
如果删除密码环境变量,当 MySQL 容器重启或重建时:
- 不会设置 root 密码(安全风险)
- 不会自动创建数据库和用户
- 可能导致数据不一致
2. 数据持久化不包含用户信息
虽然数据文件 (./mysql-wordpress2/data) 是持久化的,但:
- ✅ 数据库数据会保留
- ✅ 表结构会保留
- ❌ 用户权限信息也会保留
- ❌ 但容器初始化脚本不会再次运行
3. 安全风险
没有 root 密码的 MySQL 容器存在严重安全风险。
正确的做法
方案1:使用 Docker Secrets(生产环境推荐)
mysql-wordpress2:
image: mysql:8.0
container_name: mysql-wordpress2
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password
MYSQL_DATABASE: dl.123ppp.com
MYSQL_USER: dl.123ppp.com
MYSQL_PASSWORD_FILE: /run/secrets/mysql_user_password
volumes:
- ./mysql-wordpress2/data:/var/lib/mysql
secrets:
- mysql_root_password
- mysql_user_password
secrets:
mysql_root_password:
file: ./secrets/mysql_root_password.txt
mysql_user_password:
file: ./secrets/mysql_user_password.txt
方案2:使用环境变量文件
创建 .env 文件:
# .env 文件
MYSQL_ROOT_PASSWORD=jk
MYSQL_PASSWORD=jk
然后在 docker-compose.yml 中引用:
mysql-wordpress2:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: dl.123ppp.com
MYSQL_USER: dl.123ppp.com
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
方案3:首次运行后注释掉(不推荐)
mysql-wordpress2:
image: mysql:8.0
container_name: mysql-wordpress2
# environment:
# MYSQL_ROOT_PASSWORD: jk
# MYSQL_DATABASE: dl.123ppp.com
# MYSQL_USER: dl.123ppp.com
# MYSQL_PASSWORD: jk
volumes:
- ./mysql-wordpress2/data:/var/lib/mysql
风险:如果容器被删除重建,所有用户和权限都会丢失。
验证当前状态
你可以检查数据是否已初始化:
# 查看数据库是否已存在
docker exec -it mysql-wordpress2 mysql -uroot -pjk -e "SHOW DATABASES;"
# 查看用户权限
docker exec -it mysql-wordpress2 mysql -uroot -pjk -e "SELECT user, host FROM mysql.user;"
建议
保留密码配置,但可以考虑:
- 使用 .env 文件管理密码
- 将 .env 文件加入 .gitignore
- 定期备份数据库
这样既安全又便于维护。
.env 文件应该放在 docker-compose.yml 的同一目录下。
两个mysql服务设置不同的密码
如果有两个mysql服务需要设置不同的密码,就需要为每个服务设置不同的环境变量名。
「点点赞赏,手留余香」
声明:本文为原创文章,版权归旷野小站所有,欢迎分享本文,转载请保留出处!