postgresql - 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
我看不到我在里面创建的对象!
请帮我。
解决方案
您很可能没有看到更改,因为使用原始容器创建的卷没有被新容器使用。
请参阅持久化 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
这意味着,如果您所做的所有更改都在数据库上,则可能甚至不需要制作容器的副本。包含数据库的卷是您需要保留的!
并确保在要启动容器时挂载并使用它。
推荐阅读
- angular - 未处理的承诺拒绝:Zone.js 检测到 ZoneAwarePromise : Angular
- python - 在python中使用客户端证书进行相互身份验证
- c# - Exclude values "starting with" from column in WPF DataGrid
- python-3.x - 获取本地网络上未在 /etc/hosts 中设置的远程计算机的主机名
- r - .5 的 R round() 规则
- python - 为什么我的样本权重会破坏我的神经网络?
- odoo - 如何为 res.user 而不是 res.partner 在 Odoo 的 Web 模块中自动登录?
- javascript - 使用 VueJs 导入 json 的问题
- python - 在 Heroku 上部署 Django?
- javascript - 将存储的数组对象显示为 Javascript 到 HTML 中的列表