为什么 docker 没有在我的 mongo 数据库容器中提交保存数据?
Why isn't docker commit saving data in my mongo database container?
我有一个 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-compose
与 docker run
有什么不同?
因为里面定义了一个VOLUME
docker commit
将overlay fs 的内容保存为新图像,但VOLUMES 超越了overlay fs。这就是它没有被保存的原因。
我过去遇到过同样的问题并通过使用不同的数据目录解决了修补 mongo 图像的问题,这样数据就会写入容器而不是 VOLUME。
我有一个 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-compose
与 docker run
有什么不同?
因为里面定义了一个VOLUME
docker commit
将overlay fs 的内容保存为新图像,但VOLUMES 超越了overlay fs。这就是它没有被保存的原因。
我过去遇到过同样的问题并通过使用不同的数据目录解决了修补 mongo 图像的问题,这样数据就会写入容器而不是 VOLUME。