ara*_*lar 3 postgresql sqlalchemy docker boot2docker docker-compose
我在我的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
Run Code Online (Sandbox Code Playgroud)
这里是我使用了该Dockerfile postgresdb和postgresdbdata服务(基本上创建了数据库,并增加了一个用户):
FROM postgres
ADD make-db.sh /docker-entrypoint-initdb.d/
Run Code Online (Sandbox Code Playgroud)
如何在main服务运行完毕后将数据保留下来,以便将来能够使用它(例如当我调用类似的东西时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
Run Code Online (Sandbox Code Playgroud)
echo命令将运行并且容器将退出,但只要不是docker rm它,您仍然可以引用它--volumes-from并且您的Compose应用程序应该正常工作.
| 归档时间: |
|
| 查看次数: |
3426 次 |
| 最近记录: |