启动容器时可通过-e设置密码;已运行容器可登录后用ALTER USER修改;忘记密码可跳过权限验证重置;也可挂载init.sql脚本初始化密码。

MySQL 镜像在使用 Docker 部署时,通常会设置初始密码。如果需要修改这个密码,可以通过多种方式实现,具体取决于你是否已经初始化了容器。以下是几种常见的修改 MySQL 镜像初始密码的方法。
1. 启动容器时设置新密码
如果你还没有运行 MySQL 容器,最简单的方式是在启动容器时通过环境变量指定 root 密码。
- 使用 -e MYSQL_ROOT_PASSWORD=your_password 指定密码
示例命令:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=newpassword -d mysql:8.0
这样启动后,root 用户的密码就是 newpassword。这是最推荐的初始化方式。
2. 修改已运行容器的密码
如果容器已经运行且你忘记了密码,可以进入容器内部通过 SQL 命令修改 root 密码。
- 进入 MySQL 容器:
docker exec -it mysql-container mysql -u root -p
输入当前密码登录。如果无法登录,可参考第3种方法重置密码。
- 登录后执行修改密码语句(MySQL 8.0+):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
如果你需要允许远程连接,还需修改对应主机的用户:
ALTER USER 'root'@'%' IDENTIFIED BY 'newpassword';
修改完成后刷新权限:
FLUSH PRIVILEGES;
3. 忘记密码时重置 root 密码
当忘记 root 密码时,可以通过跳过权限验证的方式重置密码。
- 停止当前 MySQL 容器:
docker stop mysql-container
- 以跳过权限表模式启动:
docker run --name mysql-temp --mount source=mysql-data,target=/var/lib/mysql -e MYSQL_DATABASE=mydb -d mysql:8.0 --skip-grant-tables
- 进入容器并登录 MySQL(无需密码):
docker exec -it mysql-temp mysql
- 执行密码重置:
USE mysql;
UPDATE user SET authentication_string = PASSWORD('newpassword') WHERE User = 'root';
-- 或者使用新的加密方式:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;
- 退出并删除临时容器,重新启动原容器即可使用新密码。
4. 使用配置文件方式初始化密码
你也可以通过挂载自定义的 my.cnf 或初始化脚本来自定义密码策略。
- 创建一个初始化 SQL 脚本,如 init.sql:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your-initial-password';
- 启动容器时挂载该脚本到 /docker-entrypoint-initdb.d/ 目录:
docker run --name mysql-container -v ./init.sql:/docker-entrypoint-initdb.d/init.sql -e MYSQL_ROOT_PASSWORD=oldpass -d mysql:8.0
MySQL 会在首次启动时自动执行该脚本,完成密码修改。
基本上就这些常用方法。根据你的使用场景选择合适的方式,注意备份数据,避免误操作导致服务中断。










