mongodb - 为什么 docker commit 没有将数据保存在我的 mongo 数据库容器中?

标签 mongodb docker docker-compose

我有一个 docker-compose 文件,它将种子脚本与 docker 公共(public)注册表中的 mongo 镜像链接起来。我可以用以下内容填充数据库:

docker-compose up
docker-compose run seed_script

我可以使用主机系统中的 mongo cli 连接到此 mongo 容器,并验证种子脚本是否正常工作以及数据库中是否有数据。

完成播种后,我可以使用 docker ps 看到 mongo 容器 ID。我通过在 docker-compose 终端中按 Ctrlc 来停止容器,并将更改提交到 mongo 容器:

docker commit <mongo container ID> mongo-seeded-data

但是,当我单独运行该容器时,它是空的:

docker run -p 27017:27017 mongo-seeded-data

mongo
> show dbs
local  0.000GB

如果我再次启动 docker-compose 容器并使用我的主机 mongo 客户端,我可以看到数据:

docker-compose up

mongo
> show dbs
seeded_db  0.018GB
local      0.000GB

我提交了包含数据的容器。为什么当我打开容器时它不存在? docker-composedocker run 的做法有何不同?

最佳答案

因为里面定义了一个VOLUME。

docker commit将overlay fs的内容保存为新镜像,但VOLUMES超越了overlay fs。这就是它没有被保存的原因。

我过去也遇到过同样的问题,并解决了通过使用不同的数据目录修补 mongo 镜像的问题,以便数据将写入容器而不是 VOLUME 内。

关于mongodb - 为什么 docker commit 没有将数据保存在我的 mongo 数据库容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37278746/

相关文章:

php - php 显示错误

node.js - Node 中奇怪的范围行为还是我在 sleep ?

docker - 处理克隆容器上的不同配置文件

javascript - 使用node.js在javascript中访问mongodb文档

php - 使用 PHP 删除嵌入的 MongoDB 文档

node.js - Docker-compose 和 Node 容器不是主要容器

python - 远程 Jupyter Notebook + Docker -- 不更新文件目录?

docker - Docker-compose不读取环境变量(MYSQL_DATABASE_PASSWORD)

postgresql - 如何在 docker compose 中为 postgres 使用音量?

java - Docker 容器无法使用 Java 12 运行 jacoco 代理