[英]Change mysql password in Docker container
我如何更改 docker 容器中的 root 密码,因为一旦我停止 mysql 服务,容器就会自动停止。
我应该停止 mysql 容器并部署一个新容器吗?
您可以使用docker exec
session从正在运行的容器更改它,如“ 从容器内连接到 MySQL 服务器”中所述
服务器准备就绪后,您可以在刚刚启动的 MySQL 服务器容器中运行 mysql 客户端并将其连接到 MySQL 服务器。
使用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
”中所述,不要忘记hub.docker.com/mysql
secrets :
作为通过环境变量传递敏感信息的替代方法,可以将
_FILE
附加到先前列出的环境变量,从而使初始化脚本从容器中存在的文件中加载这些变量的值。
特别是,这可用于从存储在/run/secrets/<secret_name>
文件中的 Docker 机密加载密码。
例如:$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag
如果您忘记了旧密码,您可以按照以下几个步骤重置密码。 我写了一个关于如何做到这一点的教程(你可以通过鼓掌表示支持): 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容器并开始使用新密码🤯
哦,再也不会忘记你的密码了😅
首先使用 docker container bash
docker exec -it containerId bash
然后
设置新的mysql密码
mysqladmin -u root -p'oldpassword' password 'newpassword'
设置密码为空使用
mysqladmin -u root -p'oldpassword' password ''
确保-p
和oldpassword
之间没有空格
您还可以在运行容器时使用 -e 选项设置密码,该选项设置环境变量MYSQL_ROOT_PASSWORD
docker run -d \
--name=mysql5.7 \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 mysql/mysql-server:latest
不幸的是,要在 MYQL 8.0 中重置 root 密码,Martin Binzari 即将推出的 Tipp 不再完全有效。 但是您可以执行以下操作:(根据他的手册和如何在 MySQL 8.0.11 中重置 root 密码? )
mysql-init.sql
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
docker-compose stop mysql
停止容器docker-compose run mysql bash
mysqld_safe --init-file=/tmp/mysql-init.sql &
mysql -uroot
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.