到目前为止,我在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>
在重新启动容器后,密码配置如何保持不变?
答案 0 :(得分:0)
容器不是无状态的。容器易于创建和销毁,因此可以用来运行无状态的服务,但是每个容器本身都是有状态的。
容器运行时,会有一个包含其根文件系统的卷。您不必告诉Docker创建它。 Docker必须创建它,因为否则容器的文件会放在哪里?
您说docker stop
时,该容器停止运行,但未销毁。当您说docker start
时,相同的容器将以相同的根卷恢复。更改后的密码将一直存在。容器中正在运行的进程已停止,并且启动了新进程(因此,保存在内存中的状态将丢失),但是文件系统仍然存在。
要摆脱容器(包括更改的密码),请说docker rm
。然后,您可以说docker run
从头开始。