我正在使用docker-compose
开发具有postgres
数据库的django项目。
使用VS代码,在Docker Compose Up
之后,我得到了两个正在运行的泊坞窗。
每次我在项目上工作时,数据库都是完整的
问题是,对requirements.txt
进行任何更改时,即使未对该数据库图像进行任何更改,数据库图像也会重置。
我必须运行python manage.py migrate
和createsuperuser
,并且数据库为空。
[我可以理解,web
发生更改时必须重新创建requirements.txt
docker映像,但是为什么要重置数据库映像?
是否有避免这种情况的方法?我不希望发布生产应用程序,并且不能在不丢失数据库的情况下在新版本中安装其他库。
docker-compose.yml
:
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_USER: 'aaa'
POSTGRES_PASSWORD: 'aaa'
POSTGRES_DB: 'aaa'
web:
build: .
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
stdin_open: true
tty: true
Dockerfile
:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
您应该为数据库创建持久卷:
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_USER: 'aaa'
POSTGRES_PASSWORD: 'aaa'
POSTGRES_DB: 'aaa'
PGDATA: '/database'
volumes:
- ./database:/database
web:
build: .
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
stdin_open: true
tty: true