在Docker容器中更改mysql密码

胡亦朗*_*胡亦朗 12 mysql docker

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

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

Von*_*onC 13

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

服务器准备就绪后,您可以在刚刚启动的MySQL Server容器中运行mysql客户端并将其连接到MySQL服务器.
使用该docker exec -it命令在已启动mysql的Docker容器内启动客户端,如下所示:

docker exec -it mysql1 mysql -uroot -p
Run Code Online (Sandbox Code Playgroud)

询问时,输入生成的root密码(请参阅上面有关如何查找密码的说明).因为MYSQL_ONETIME_PASSWORD默认情况下该选项为true,所以在使用上面的示例命令启动服务器容器并将mysql客户端连接到服务器之后,必须通过为MySQL 5.7及更高版本发出以下语句来重置服务器root密码:

mysql> update user set authentication_string=password('new_password') where user='root';
Run Code Online (Sandbox Code Playgroud)

或者运行,

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
Run Code Online (Sandbox Code Playgroud)

对于旧版本而不是MySQL 5.7,运行,

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
Run Code Online (Sandbox Code Playgroud)

newpassword用您选择的密码替换.重置密码后,服务器即可使用.

然后,如" hub.docker.com/mysql"中所述,不要忘记码头工人的秘密:

作为通过环境变量传递敏感信息的替代方法,_FILE可以将其附加到先前列出的环境变量,从而使初始化脚本从容器中存在的文件加载这些变量的值.
特别是,这可以用于从存储在/run/secrets/<secret_name>文件中的Docker机密加载密码.
例如:

select * from mysql.user;
Run Code Online (Sandbox Code Playgroud)

  • @lily,您可以尝试执行到容器中并发出命令“$ printenv”。如果幸运的话,容器的环境变量中可能有它的密码 (3认同)
  • “ALTER USER”命令对我运行 mysql 5.6 不起作用。我收到一条“错误 1064 (42000):您在第 1 行‘由 .. 识别’附近有一个错误” (2认同)
  • 如果我忘记了密码并且想更改新密码怎么办? (2认同)