晚上好。
我们了解到Docker容器是无状态的,但是看起来Alpine Linux容器违反了此规则:
docker run <containername> -it /bin/sh
apk add nano
如果我们现在停止并启动该容器,它仍然知道nano编辑器。
这是Alpine Linux中的一项特殊功能,还是听起来像我们的Docker主机做了一些奇怪的事情?
非常感谢您的帮助!亲切的问候,
托马斯。
答案 0 :(得分:5)
这里的概念似乎有一个基本的误解:Docker容器并非本身是无状态的。如果您对容器文件系统进行了任何更改,则只要容器存在,它就会一直存在。只有在容器被销毁(删除)后,文件系统的可写层(其中包含自创建容器以来所做的所有更改)才会被删除。
当我们说“ Docker容器是无状态的”时,我们并不是指根据定义它们是无状态的,而是针对最佳实践以及有关如何使用容器的指南。无状态是使用容器的一种模式,它可以将它们视为一次性实体,例如:
也就是说,您必须了解Docker不会强制无状态-容器的创建者和用户您必须对此进行考虑。您必须将所有持久性应用程序数据存储在外部存储器中,从外部安装到容器中或网络存储中,例如在数据库中。
因此,回答最初的问题-阿尔卑斯山没有什么特别的。您将文件添加到容器中-直到容器被销毁为止,您都可以在其中保存文件。这对于任何容器都是如此,不仅是对于根据Alpine映像创建的容器。
答案 1 :(得分:2)
停止时该容器仍然存在。
仅当您删除容器(docker container rm <id>
)并通过docker container run
重新启动它时,它才会是指定图像之外的一个全新容器。如果您停止它然后重新运行它,它仍然是相同的。
(只有在宽限期之后才会被杀死)