【问题标题】:Changes in container not persisted after docker commit [duplicate]docker commit 后容器中的更改未保留 [重复]
【发布时间】:2021-09-29 07:51:09
【问题描述】:

我只是创建一个容器,例如:

docker run --name mypostgres \
--publish 5432:5432 \
--net=apinetwork \
-e POSTGRES_PASSWORD=pwd \
-e POSTGRES_DB=db_uso \
-d postgres

我在数据库中连接并创建一些表和对象...

在此之后我提交;

docker commit mypostgres user/mypostgres

但是当我从这个图像创建其他容器时:

docker run --name mypostgres2 \
--publish 5432:5432 \
--net=apinetwork \
-e POSTGRES_PASSWORD=mysecretpassword \
-e POSTGRES_DB=correntista \
-d user/mypostgres

我没有看到我在里面创建的对象!

请帮帮我。

【问题讨论】:

  • 在创建新容器之前,是否可以尝试断开并重新连接到数据库并验证您的更改是否仍然存在
  • 谢谢@smac89。是的。我停止了容器并重新开始,我所有的对象都在那里。但是当使用 docker 提交图像时没有我的对象。我尝试在我的基本容器运行的情况下执行此操作,并且在容器停止的情况下尝试了 agian 之后。但没有任何效果
  • @MarcelloRomani 链接到的问题很好地描述了这种情况;您需要在此处创建一个 Docker 卷并使用 docker run -v 选项挂载它。一般来说,您几乎不应该使用docker commit,因为它会导致无法重现的图像。 (如果user/mypostgres 基于 PostgreSQL 13.4,并且假设该版本中有一个关键安全版本,您将如何更新该映像?)

标签: postgresql docker


【解决方案1】:

很可能您没有看到更改,因为使用原始容器创建的卷没有被新容器使用。

参见Persist the DB Docker 教程。


您需要显式创建一个卷,并确保它正在新容器中使用。

$ docker volume create my-pg-db
$ docker run --name mypostgres \
  --publish 5432:5432 \
  --net=apinetwork \
  -v my-pg-db:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=pwd \
  -e POSTGRES_DB=db_uso \
  -d postgres

这意味着,如果您所做的所有更改都在数据库上,则甚至可能不需要复制您的容器。包含数据库的卷是您需要保留的!

并确保您mount 并在您想要启动容器时使用它。

【讨论】:

  • 如果数据库数据在容器的文件系统中 - 没有使用卷 - 并且该容器被commited 到一个新图像,那么为什么没有选择该数据(一个新层)在新容器中?
  • OK 找到了答案...关于 SO :)
  • @MarcelloRomani 请分享您的答案,或给我们一个链接:)
  • 我把它作为一个正确的答案发布了:)
【解决方案2】:

其他 SO 问题中解释了数据未持久化的原因:

docker postgres with initial data is not persisted over commits

问题在于 postgres Dockerfile 将“/var/lib/postgresql/data”声明为一个卷。这只是一个普通目录,位于图像使用的联合文件系统之外。卷一直存在,直到没有容器链接到它们并且它们被显式删除。

这就是为什么您需要像@smac90 这样的外部管理卷。

来源: https://github.com/docker-library/postgres/blob/5c0e796bb660f0ae42ae8bf084470f13417b8d63/Dockerfile-debian.template#L186

【讨论】:

    猜你喜欢
    • 2016-10-09
    • 1970-01-01
    • 2019-03-23
    • 2020-08-21
    • 1970-01-01
    • 2020-04-22
    • 2014-07-22
    • 1970-01-01
    • 2018-01-20
    相关资源
    最近更新 更多