docker-compose:postgres数据不会持续

我有一个在我的docker-compose文件中使用postgres的图像的主要服务,虽然我似乎成功地连接到数据库,但是我正在写入的数据并没有超出容器的生命周期我所做的是基于这个教程 )。

这是我的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服务(本质上创build数据库并添加一个用户)的Dockerfile:

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

main服务完成运行后,如何获取数据以便将来能够使用它(比如当我调用像python manage.py retrieve_from_database这样的东西时)? /var/lib/postgresql甚至是正确的目录,并且boot2docker可以访问它,因为它显然限于/Users/

谢谢!

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

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

目前最好的解决scheme是将postgresdbdata容器从Composeconfiguration中取出。 做类似的事情:

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

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