我有一个docker-compose文件,它将种子脚本与来自docker公共注册中心的mongo图像相关联。我可以使用以下命令填充数据库:
docker-compose up
docker-compose run seed_script
我可以使用来自主机系统的mongo
cli连接到此mongo容器,并验证种子脚本是否正常工作以及数据库中的数据。
当我完成播种时,我可以看到带有docker ps
的mongo容器ID。我在docker-compose终端中按 Ctrl c 停止容器,并将更改提交给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
?
答案 0 :(得分:1)
因为其中定义了VOLUME。
docker commit
将叠加层fs的内容另存为新图像,但是“体积”超出了叠加层fs。这就是为什么它无法保存。
过去,我遇到了同样的问题,并解决了通过使用不同的数据目录修补mongo映像的问题,以便将数据写入容器中而不是VOLUME中。