簡體   English   中英

在 Docker 容器中更改 mysql 密碼

[英]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 ''

確保-poldpassword之間沒有空格

您還可以在運行容器時使用 -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 密碼?

  1. 創建一個mysql-init.sql
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
  1. 將其掛載到 /tmp 文件夾。
  2. 使用docker-compose stop mysql停止容器
  3. 運行docker-compose run mysql bash
  4. 里面運行命令mysqld_safe --init-file=/tmp/mysql-init.sql &
  5. 等待 10 秒,按回車並運行mysql -uroot
  6. 然后你可以運行命令ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
  7. 最后,您可以使用新的 root 密碼退出並登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM