在Docker容器中更改mysql密码

时间:2018-01-14 13:11:07

标签: mysql docker

我怎么能在docker容器中更改root密码,因为一旦我停止mysql服务,容器就会自动停止。

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

3 个答案:

答案 0 :(得分:12)

您可以使用docker exec session从正在运行的容器中更改它,如“Connecting to MySQL Server from within the Container”中所述

  

服务器准备就绪后,您可以在刚刚启动的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。重置密码后,服务器就可以使用了。

然后,如“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

答案 1 :(得分:1)

首先使用

进入docker container bash

docker exec -it containerId bash

然后

  • 设置新的mysql密码

    mysqladmin -u root -p'oldpassword' password 'newpassword'

  • 要将密码设置为空使用

    mysqladmin -u root -p'oldpassword' password ''

确保在 -p oldpassword

之间没有空格

答案 2 :(得分:1)

万一您忘记了旧密码,可以按照以下步骤重设密码。我写了一个有关如何做的教程(您可以通过鼓掌向您表示支持):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),然后使用初始化脚本启动mysqld。

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

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

哦,再也不会忘记密码?