You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker容器中修改MySQL Root密码?停止服务致容器终止需重部署吗?

在Docker容器中修改MySQL root密码的方法

嘿,这个问题我之前折腾过,其实完全不需要停止容器再重新部署,下面几种方法都能搞定,而且不用动容器的生命周期:

方法一:进入运行中的容器修改(最直观)

这是最常用的方式——毕竟MySQL是容器的主进程,停它容器直接就没了,所以直接在运行的容器里操作就行:

  • 首先进入你的MySQL容器,替换成你的容器名称或ID:
    docker exec -it mysql-container bash
    
  • 登录MySQL,输入旧密码:
    mysql -uroot -p
    
  • 根据你的MySQL版本执行修改密码的SQL:
    • 如果你用的是MySQL 5.7及更早版本:
      SET PASSWORD FOR 'root'@'%' = PASSWORD('你的新密码');
      
    • 如果你用的是MySQL 8.0及以上版本(注意语法变了):
      ALTER USER 'root'@'%' IDENTIFIED BY '你的新密码';
      

    这里的%表示允许root从任何远程地址登录,如果只需要本地访问,可以改成localhost

  • 刷新权限让修改生效:
    FLUSH PRIVILEGES;
    
  • 退出MySQL和容器就完成了,容器全程不用停,修改立刻生效。

方法二:直接用docker exec执行SQL(适合脚本化)

不想进入容器的话,可以直接通过docker exec命令一次性执行修改密码的SQL:

  • 替换容器名、旧密码、新密码,注意旧密码和-p之间没有空格:
    # MySQL 8.0+版本
    docker exec -it mysql-container mysql -uroot -p旧密码 -e "ALTER USER 'root'@'%' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES;"
    
    # MySQL 5.7及更早版本
    docker exec -it mysql-container mysql -uroot -p旧密码 -e "SET PASSWORD FOR 'root'@'%' = PASSWORD('新密码'); FLUSH PRIVILEGES;"
    

特殊情况:忘记旧密码怎么办?

如果连旧密码都忘了,也不用慌,我们可以临时启动容器跳过权限验证来修改:

  1. 先停止当前容器:
    docker stop mysql-container
    
  2. 重新启动容器,添加跳过权限检查的参数(加上--skip-networking是为了防止临时启动时被外部连接):
    docker run -d --name mysql-container -v /your/mysql/data/path:/var/lib/mysql mysql:8.0 --skip-grant-tables --skip-networking
    

    这里的/your/mysql/data/path是你之前挂载的数据卷路径,一定要保留,不然数据会丢失

  3. 进入容器并直接登录MySQL(不需要密码):
    docker exec -it mysql-container mysql -uroot
    
  4. 执行修改密码的SQL(同样分版本),然后刷新权限:
  5. 停止容器,再用正常命令启动即可,密码已经更新,数据也不会丢。

总结

完全不需要重新部署新容器!因为MySQL容器的核心数据都存在你挂载的数据卷里,只要操作时保留数据卷,修改密码的操作都是持久化的。优先用前两种方法,只有忘记密码时才需要临时调整容器启动参数。

内容的提问来源于stack exchange,提问作者胡亦朗

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:27:28