更改 Docker 容器中的 mysql 密码

新手上路,请多包涵

我如何更改 docker 容器中的 root 密码,因为一旦我停止 mysql 服务,容器就会自动停止。

我应该停止 mysql 容器并部署一个新容器吗?

原文由 Stackoverflow 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 914
2 个回答

您可以使用 docker exec 会话 从正在运行的容器中更改它,如“ 从容器内连接到 MySQL 服务器”中所述

服务器准备就绪后,您可以在刚刚启动的 MySQL Server 容器中运行 mysql 客户端并将其连接到 MySQL Server。

使用 docker exec -it 命令在已启动的 Docker 容器内启动 mysql 客户端,如下所示:

 docker exec -it mysql1 mysql -uroot -p

询问时,输入生成的 root 密码(请参阅上面的说明以了解如何找到它)。因为 MYSQL_ONETIME_PASSWORD 选项默认为 true,所以在您使用上面的示例命令启动服务器容器并将 mysql 客户端连接到服务器后,您必须通过为 MySQL 5.7 发出此语句来重置服务器 root 密码,并且以上 :

 mysql> update user set authentication_string=password('new_password') where user='root';

或者运行,

 mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');

对于 MySQL 5.7 和更早的版本,运行,

 mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

用您选择的密码替换 newpassword 。重置密码后,服务器就可以使用了。

请注意,上述命令只会更改从 ‘localhost’ 主机连接的 ‘root’ 的密码。您可以使用以下命令验证这一点:

 select * from mysql.user;

要更改所有主机的“root”密码,请使用:

 ALTER USER 'root'@'%' IDENTIFIED BY 'newpassword';

然后,如“ hub.docker.com/mysql ”中所述,不要忘记 docker secrets

作为通过环境变量传递敏感信息的替代方法,可以将 _FILE 附加到先前列出的环境变量中,从而导致初始化脚本从容器中存在的文件中加载这些变量的值。

特别是,这可用于从存储在 /run/secrets/<secret_name> 文件中的 Docker 机密中加载密码。

例如:

 $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag


xeruf评论 中指出“ MYSQL_ROOT_PASSWORD 已设置,但在 docker 容器中得到“ Access denied for user 'root'@'localhost' (using password: YES)" ”,并添加:

如果您挂载了一个卷,请务必在更改 USER/PASSWORD 时清除它!

原文由 VonC 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您忘记了旧密码,您可以按照几个步骤将其重置。我写了一个关于如何做的教程(你可以通过鼓掌来表示你的支持): https ://medium.com/@marinbinzari/reset-root-mysql-password-in-docker-d961c71285e4

TLDR :创建一个 mysql-init.sql 文件,其中包含重置密码的查询:

 USE mysql;
UPDATE user SET Password=PASSWORD('YOURNEWPASSWORD') WHERE User='root';
FLUSH PRIVILEGES;

将文件挂载到 /tmp 文件夹中,运行容器(不执行所以不启动MySQLD),然后用init脚本启动mysqld。

 mysqld_safe --init-file=/tmp/mysql-init.sql &

尝试连接,退出 docker 容器并开始使用新密码🤯

哦,再也不要忘记密码了😅

原文由 Marin Bînzari 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题