+-
postgresql – docker-compose:postgres数据不持久
我在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

这是我用于postgresdb和postgresdbdata服务的Dockerfile(实质上是创建数据库并添加用户):

FROM postgres

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

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

谢谢!

最佳答案
问题是Compose每次重新启动时都会创建一个新版本的postgresdbdata容器,因此旧容器及其数据会丢失.

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

目前最好的解决方案是将postgresdbdata容器从Compose配置中取出.做类似的事情:

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

echo命令将运行,容器将退出,但只要不停靠它,你仍然可以在–volumes-from中引用它,你的Compose应用程序应该可以正常工作.

点击查看更多相关文章

转载注明原文:postgresql – docker-compose:postgres数据不持久 - 乐贴网