首次运行后,MySQL Docker容器存储密码

时间:2018-11-29 23:36:54

标签: mysql docker

到目前为止,我在Docker方面的所有经验使我相信容器是无状态的。

如果是这样,为什么我在未指定卷或绑定挂载的情况下启动它,为什么我的容器存储了在第一次运行后将其更改为的密码?令我特别困惑的是,我对dbms所做的其他任何编辑都不会持续(例如创建表)。

其他详细信息:
版本:
1. Docker-18.09.0 build 4d60db4
2.图片-mysql / mysql-server:latest

命令:
 1. $ docker run --name=sql -d mysql/mysql-server:latest
 2. $ 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';
 6. mysql> exit
 7. $ docker stop sql
 8. $ docker start sql
 9. $ docker exec -it sql mysql -uroot -p
 10. mysql> Enter Password: <stkoverflw>

在重新启动容器后,密码配置如何保持不变?

1 个答案:

答案 0 :(得分:0)

容器不是无状态的。容器易于创建和销毁,因此可以用来运行无状态的服务,但是每个容器本身都是有状态的。

容器运行时,会有一个包含其根文件系统的卷。您不必告诉Docker创建它。 Docker必须创建它,因为否则容器的文件会放在哪里?

您说docker stop时,该容器停止运行,但未销毁。当您说docker start时,相同的容器将以相同的根卷恢复。更改后的密码将一直存在。容器中正在运行的进程已停止,并且启动了新进程(因此,保存在内存中的状态将丢失),但是文件系统仍然存在。

要摆脱容器(包括更改的密码),请说docker rm。然后,您可以说docker run从头开始。