我最担心的情况发生了:我的纯数据docker容器突然是空的。
这并不严重:这是一台开发机器,我有备份。但我最害怕的是,因为我知道我对Docker的理解仍然存在漏洞。
我在这个答案中读到了以下内容:
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
我有一个1)一个引用纯数据容器的mongo容器和2)纯数据容器本身。我最近在引用纯数据容器的mongodockerlocal_mongo_instance_1
容器上运行了几次docker rm。
我可以从< code>docker ps命令(见上文)的输出中看到,它说纯数据容器是“3小时前”创建的。但是我在两周前创建了它。不知何故,我原来的那个不见了。我的问题是这怎么可能发生?还有哪些可能性?
我检查了我的bash命令历史,并且< code>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
最后,我的答案是忘记使用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上使用了体积参数。我希望这也能解决我原来的问题…
如果您曾经运行docker-compose-rm
(或者更糟的是,docker-copose-rm-f
>),那么会删除
docker-compose-up-mongo_instance启动
mongo_instance
container,也会创建
mongo_instance依赖于
,因此在
0.05 mongo_nstancedocker-compose-ompose-rm
有几件事你需要明白。
true
,然后关闭。如果您只创建一次容器,然后再也不运行它会更好。在您的情况下,解决方案是在Compose之外定义数据容器,例如:
docker run --name mongo_data mongodb echo "Data Container"
这将运行< code>echo命令,然后立即退出。然后,您可以从Compose yaml中删除< code>mongo_data条目。注意,我有意使用了< code>mongodb图像,而不是< code > tianon/true ;由于数据容器没有保持运行,它不会占用任何额外的空间,使用< code>mongodb映像可以确保文件权限等是正确的。
本文向大家介绍Docker 仅数据容器,包括了Docker 仅数据容器的使用技巧和注意事项,需要的朋友参考一下 示例 仅数据容器已过时,现在被视为反模式! 在过去的日子里,在使用Docker的volume子命令之前以及在可以创建命名卷之前,当在任何容器中都不再有对它们的引用时,Docker删除了这些卷。仅数据容器已过时,因为Docker现在可以通过各种docker volume子命令创建命名卷以及
我在本地机器上运行这个命令docker run-d--name SonarQube-p9000:9000-p9092:9092 SonarQube 这将从dockerhub获取分支的映像,然后创建映像的容器。现在我想对文件进行一些更改,但容器中没有编辑器。我尝试使用apt-get安装vi,但它说我需要是根用户才能执行命令,当我编写sudo时,它说找不到命令。如何在容器中安装编辑器? 我运行这个命令
我在我的项目中使用postgres docker映像。对于初始化,我使用以下命令来创建和初始化我的数据库(表、视图、数据…) 复制sql_dump.sql /docker-entrypoint-initdb.d 容器停止和删除后是否可以保留这些数据?例如,当我运行postgres的图像时,它将使用这些数据创建数据库,而每次容器启动时都没有加载脚本。只需加载第一次运行创建的数据。 我做了一些研究,发
但是这个问题的答案并没有解决我的用例。 我有一个MySQL数据库,在生产中有5TB的数据。对于开发,我只需要大约500MB的数据。作为我的应用程序构建的一部分运行的集成测试需要访问MySQL数据库。目前,该数据库正在Jenkins上创建,并且通过构建过程将数据注入其中。这很慢。 我想用Docker替换这个过程的这一部分。我的想法是,我将拥有一个运行MySQL的Docker容器,并且已经将500MB
我使用docker撰写启动一个mysql da和一个springstart应用程序。 这是我的docker-compose.yml 这是我的application.properties 在这里,我创建了jdbi: 不管我怎么做,我都无法让集装箱在码头内相互交谈。如果我单独启动sql,我可以在主机中看到连接(在datagrip中)。如果我从容器中运行java程序,它会看到主机中的数据库。即使我运行d
在将Django docker容器连接到Postgres数据库时,我收到以下错误。 下面是运行容器的Dockerfile pg_hba.conf->宿主all all 0.0.0.0/0 md5 我已经读到上面的以下细节打开数据库上的连接。