我最担心的情况是:我的仅限数据的docker容器突然变空。
这并不严重:它是一台开发机器,我有备份。但我最担心的是因为我知道我对Docker的理解仍然存在漏洞。
我已在this answer中读到以下内容:
Docker容器将保留在磁盘上,直到使用docker rm 明确删除它们为止。
以下是我感兴趣的容器(来自docker ps
命令):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
478e59ecd218 dockerlocal_mongo_instance "/entrypoint.sh mongo" About an hour ago Exited (137) 12 minutes ago dockerlocal_mongo_instance_1
0ca49f6629cb tianon/true "/true" 3 hours ago Exited (0) About an hour ago dockerlocal_mongo_data_1
我有一个mongo容器,它引用了仅数据容器,以及2)仅数据容器本身。我最近在mongo docker rm
容器上运行了dockerlocal_mongo_instance_1
几次,该容器引用了仅数据容器。
我可以从docker ps
命令(见上文)的输出中看到,它表示仅在3小时前创建了仅数据容器'。但是我在大约两周前创建了它。不知怎的,我原来的一个已经走了。我的问题是这怎么可能发生?还有哪些其他可能性?
我已经检查了我的bash命令历史记录,docker rm
命令只在mongo容器上运行,而不是在仅数据容器上运行 - 出于显而易见的原因,我一直非常小心不要触摸。
任何人都可以对此有所了解吗?我一定是误解了一些基本的东西。
对于任何其他可能导致数据容器以这种方式被删除和重新创建的情况,我将不胜感激。
Docker撰写.yml文件(相关位):
mongo_data:
image: tianon/true
volumes:
- /data/db
mongo_instance:
build: mongodb
volumes_from:
- mongo_data
ports:
- "27017:27017"
environment:
- MONGODB_USER=$S_USER_NAME
- MONGODB_PASS=$S_USER_PASSWORD
# command: --auth
答案 0 :(得分:1)
您需要了解一些事情。
true
,然后关闭。如果你刚刚创建了一次容器而又从未再次运行它会更好。在您的情况下,解决方案是在Compose例如:
之外定义数据容器docker run --name mongo_data mongodb echo "Data Container"
这将运行echo
命令,然后立即退出。然后,您可以从Compose yaml中删除mongo_data
条目。请注意,我故意使用mongodb
图片而不是tianon/true
;由于数据容器未运行,因此不会占用任何额外空间,并且使用mongodb
图像可确保文件权限等正确无误。
答案 1 :(得分:0)
如果您曾经docker-compose rm
(或者更糟docker-compose rm -f
),则会删除docker-compose.yml
中定义的所有现存容器。请注意,即使您只想使用mongo_instance
启动docker-compose up mongo_instance
容器,也会创建mongo_data
容器,因为mongo_instance
取决于mongo_data
在docker-compose rm
周围进行mongo_instance
时会删除两个容器。
答案 2 :(得分:0)
最后我的答案是忘记使用docker数据容器,只需在mongo容器上设置正常的音量。
mongo_instance:
build: mongodb
volume:
- /data/db:/data/db
ports:
- "27017:27017"
environment:
- MONGODB_USER=$S_USER_NAME
- MONGODB_PASS=$S_USER_PASSWORD
为什么?
所以我删除了数据容器并在mongo_instance上使用了volume参数。我希望这也解决了我原来的问题......