首页 > 解决方案 > docker commit 后容器中的更改未保留

问题描述

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

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

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

请帮我。

标签: postgresqldocker

解决方案


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

请参阅持久化 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

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

并确保在要启动容器时挂载并使用它。


推荐阅读