【发布时间】:2019-06-17 05:18:13
【问题描述】:
我是 Docker 新手,我正在尝试让 Django 应用程序在 Docker 容器中运行。此应用需要 PostgreSQL 数据库(和 redis)。
为了尝试这样做,我为我的应用程序创建了一个映像 (Dockerfile),并为数据库服务器使用了基本的 postgres 映像。我的 docker-compose 文件如下所示:
version: '3.7'
services:
db:
image: postgres
redis:
image: redis
api:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
environment:
- DJANGO_SETTINGS_MODULE=api.settings.docker_settings
volumes:
- ./api:/code/api
ports:
- "8000:8000"
depends_on:
- db
- redis
由于我的 docker-compose 文件没有为数据库定义任何卷,我预计当容器停止时数据库数据会丢失,但事实并非如此!也就是说,如果我运行docker-compose up,将数据添加到db,停止docker-compose并重新启动它,数据还在!
卷是由 Docker 自动创建的吗? (我注意到postgres 镜像的Dockerfile 中有一个VOLUME 命令,参见here)。
现在我想向 docker-compose 添加一个卷,以将数据库存储在我可以控制的地方。我怎样才能做到这一点?我想我应该将 docker-compose 文件更改为
...
db:
image: postgres
volumes:
- ./postgres_data:/var/lib/postgresql/data
...
但是我怎样才能告诉 Docker 不使用之前自动持久化的数据呢?
【问题讨论】:
-
我希望您提议的更改能达到您的预期;给定主机上的空
postgres_data目录,使用该设置重新启动容器将重新运行首次数据库设置,您将拥有一个新的空数据库。
标签: django postgresql docker docker-compose volumes