你通过 docker-compose.yml 启动了 MySQL 容器后,更改了 .yml 中的默认密码,但执行 docker-compose up -d 后发现并没有生效
✅ 核心原因:MySQL 容器的数据卷已经初始化过了
一旦 MySQL 容器第一次启动并成功初始化数据库(包括 root 密码),后续即使你修改了 .env
或 .yml
文件中的密码,它也不会生效,因为数据已经写入到挂载的数据卷里了,MySQL 只在第一次初始化时读取环境变量。
🔍 举个例子
假设你第一次写的是:
Markup 全选
environment:
- MYSQL_ROOT_PASSWORD=123456
后来你改成:
C# 全选
environment:
- MYSQL_ROOT_PASSWORD=654321
然后执行:
Markup 全选
docker-compose up -d
你会发现密码仍然是 123456
。
🛠️ 解决办法
✅ 方案一:删除数据卷重新初始化(最干净)
注意:此操作会清空数据库数据!!!请提前备份!!!
Markup 全选
docker-compose down -v
docker-compose up -d
说明:
-v
会移除挂载的卷(也就是数据库数据),然后再up
就会重新初始化并使用新的密码。
✅ 方案二:进容器后手动修改密码(保留现有数据)
如果你不想丢数据:
进入容器:
Markup 全选docker exec -it your_mysql_container_name bash
- 登录 MySQL(使用旧密码):Markup 全选
mysql -u root -p
- 修改 root 密码:Markup 全选
ALTER USER 'root'@'%' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES;
- 更新
.yml
文件中密码(保持一致)。
💡 小技巧:检查数据卷是否还在
你可以通过以下命令查看 volume:
Markup 全选
docker volume ls
或者查看具体绑定目录:
Markup 全选
docker inspect your_mysql_container_name
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 张国生