【发布时间】:2016-05-17 14:17:24
【问题描述】:
我有一个 docker-compose 文件,它将种子脚本与来自 docker 的公共注册表的 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-compose 与 docker run 有何不同?
【问题讨论】:
-
mongo 映像很可能定义了一个卷,而
docker commit不会将数据保存在卷中。 -
是的,官方 mongo 图片define own volumes。我能够解决这个问题,为 mongo 创建我自己的 Dockerfile(只是复制了官方并删除了 VOLUME 指令),并使用 docker-compose 和 named volumes
标签: mongodb docker docker-compose