我怎么能在docker容器中更改root密码,因为一旦我停止mysql服务,容器就会自动停止。
我应该停止mysql容器并部署一个新容器吗?
答案 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容器并开始使用新密码?
哦,再也不会忘记密码?