【问题标题】:docker-compose: postgres data not persistingdocker-compose:postgres 数据不持久
【发布时间】:2015-07-03 08:03:53
【问题描述】:

我的docker-compose 文件中有一个主要服务,它使用postgres 的图像,虽然我似乎成功连接到数据库,但我写入的数据并没有保留在容器的生命周期(我所做的基于this tutorial)。

这是我的docker-compose 文件:

main:
  build: .
  volumes:
    - .:/code
  links:
    - postgresdb
  command: python manage.py insert_into_database
  environment:
    - DEBUG=true


postgresdb:
  build: utils/sql/
  volumes_from:
    - postgresdbdata
  ports:
    - "5432"
  environment:
    - DEBUG=true


postgresdbdata:
  build: utils/sql/
  volumes:
    - /var/lib/postgresql
  command: true
  environment:
    - DEBUG=true

这是我用于 postgresdbpostgresdbdata 服务的 Dockerfile(本质上是创建数据库并添加用户):

FROM postgres

ADD make-db.sh /docker-entrypoint-initdb.d/

如何在main 服务完成运行后保留数据,以便将来能够使用它(例如当我调用python manage.py retrieve_from_database 之类的东西时)? /var/lib/postgresql 是否是正确的目录,boot2docker 是否可以访问它,因为它显然仅限于 /Users/

谢谢!

【问题讨论】:

  • Auto-Commit 设置为 true,还是您手动提交更改?
  • sqlalchemy 上的自动提交(这就是我正在使用的)?我相信我正在“手动”提交更改——也就是说,通过在主服务中运行 python manage.py insert_into_database 并将该提交提交给 Postgres(在我开始使用 Docker 之前它已经工作)。这是你的意思吗?
  • 是的。了解 Postgres,提交失败似乎是最可能的解释。否则我已经超出了我的深度,将退出。
  • 感谢您的回答,@Politank-Z!我认为这是我设置 Docker 的方式的问题,因为在我尝试使用 Postgres 之前我没有遇到任何问题......

标签: postgresql sqlalchemy docker boot2docker docker-compose


【解决方案1】:

问题在于 Compose 每次重新启动时都会创建一个 版本的 postgresdbdata 容器,因此旧容器及其数据会丢失。

第二个问题是您的数据容器实际上不应运行;数据容器实际上只是一个可以使用--volumes-from 导入的卷的命名空间,它仍然适用于已停止的容器。

目前最好的解决方案是将 postgresdbdata 容器从 Compose 配置中取出。执行以下操作:

$ docker run --name postgresdbdata postgresdb echo "Postgres data container"
Postgres data container

echo 命令将运行,容器将退出,但只要不 docker rm 它,您仍然可以在 --volumes-from 中引用它,并且您的 Compose 应用程序应该可以正常工作。

【讨论】:

  • 我明白了...那我该怎么办,阿德里安?
  • @miguel5 你在草稿之间抓住了我 - 我已经更新了我的答案。
  • 这不是 compose 的错:“当 docker-compose up 运行时,如果它发现之前运行的任何容器,它会将卷从旧容器复制到新容器。此过程可确保您的任何数据'已经创建的卷不会丢失。 (docs.docker.com/compose/overview/#/…)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 2022-08-13
  • 2019-04-07
  • 1970-01-01
  • 2016-12-30
相关资源
最近更新 更多