[英]MySQL Docker Container storing password after first run
到目前為止,我使用 Docker 的所有經驗都讓我相信容器是無狀態的。
如果是這樣,如果我在沒有指定卷或綁定安裝的情況下啟動它,為什么我的容器會存儲我在第一次運行后更改的密碼? 我特別困惑,因為我對 dbms 所做的其他編輯都沒有持續存在(比如創建表)。
額外細節:
版本:
1. Docker - 18.09.0 構建 4d60db4
2.鏡像-mysql/mysql-server:latest
命令:
1. $ docker run --name=sql -d mysql/mysql-server:latest
2. $ docker logs sql 2>&1 | grep GENERATED
$ docker logs sql 2>&1 | grep GENERATED
獲取第一次登錄時生成的密碼
3. $ docker exec -it sql mysql -uroot -p
4. mysql> Enter Password: <generated password>
5. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'stkoverflw';
mysql> exit
7. $ docker stop sql
8. $ docker start sql
9. $ docker exec -it sql mysql -uroot -p
10. mysql> Enter Password: <stkoverflw>
密碼配置如何在容器重新啟動后保持不變?
容器不是無狀態的。 容器易於創建和銷毀,因此它們可用於運行無狀態的服務,但每個容器本身都是有狀態的。
當容器運行時,有一個包含其根文件系統的卷。 您不必告訴 Docker 創建它。 Docker 必須創建它,否則容器的文件會去哪里?
當您說docker stop
,容器會停止運行,但不會被銷毀。 當你說docker start
,同一個容器以同一個根卷恢復。 這就是更改后的密碼仍然存在的地方。 容器中運行的進程停止並啟動一個新進程(因此內存中的狀態將丟失),但文件系統仍然存在。
要擺脫容器(包括更改的密碼),請說docker rm
。 然后你可以說docker run
從頭開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.