Docker:一个容器如何保持容器中没有卷的数据?

我正在运行docker-compose环境下使用的官方solr 6.6容器,没有任何相关的卷。 如果我修改一个正在运行的solr容器,数据将会重新启动。 我没有看到任何卷装入,它适用于一个普通的solr容器:

docker run --name solr_test -d -p 8983:8983 -t library/solr:6.6 docker exec -it solr_test /bin/bash -c 'echo woot > /opt/solr/server/solr/testfile' docker stop solr_test docker start solr_test docker exec -it solr_test cat /opt/solr/server/solr/testfile 

上面的例子打印“woot”。 我以为一个容器不会坚持任何数据? 另外文件提到solr核心坚持在容器。 所有我发现,关于容器的持久性是我需要像这里提到的那样自己添加卷。 所以我很困惑:容器是否存储在容器中更改的数据? 而且solr容器如何实现这种行为? 唯一的select,我看到的是,我误解了docker的情况下的持久性或容器的构build可以设置某种选项来实现这个我不知道,并没有看到在Solr的Dockerfile。

这是预期的行为。 只要不删除容器,在容器中创build的数据就会一直存在。

但认为容器在某种程度上抛弃了心态。 通常你会希望能够用docker rm删除容器,并产生一个新的实例,包括你的修改后的configuration文件。 这就是为什么你需要一个例如命名卷,这在你的主机上存在一个容器生命周期。

Dockerfile ,因为你在你的问题中提到它,实际上只定义了图像。 当你调用docker run你从它创build一个容器。 完全如图所示。 新的实例没有任何修改。

当你在你的容器上调用docker commit ,你可以快照它(包括你对这些文件所做的修改)并从中创build一个新的映像。 他们以这种方式实现数据持久性。 您提到的文档详细解释了这一点。