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
这里是我用于postgresdb
和postgresdbdata
服务(本质上创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应用程序应该可以正常工作。