【问题标题】:Why isn't docker commit saving data in my mongo database container?为什么 docker commit 不在我的 mongo 数据库容器中保存数据?
【发布时间】:2016-05-17 14:17:24
【问题描述】:

我有一个 docker-compose 文件,它将种子脚本与来自 d​​ocker 的公共注册表的 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 有何不同?

【问题讨论】:

  • mongo 映像很可能定义了一个卷,而docker commit 不会将数据保存在卷中。
  • 是的,官方 mongo 图片define own volumes。我能够解决这个问题,为 mongo 创建我自己的 Dockerfile(只是复制了官方并删除了 VOLUME 指令),并使用 docker-compose 和 named volumes

标签: mongodb docker docker-compose


【解决方案1】:

因为里面定义了一个VOLUME。

docker commit 将覆盖 fs 的内容保存为新图像,但 VOLUMES 超出覆盖 fs。这就是它没有被保存的原因。

我过去遇到过同样的问题,并通过使用不同的数据目录解决了修补 mongo 映像的问题,这样数据就会写入容器而不是 VOLUME。

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2021-06-09
    • 2020-12-05
    • 1970-01-01
    相关资源
    最近更新 更多