带有 docker-compose 的 Django 应用程序将数据保存在媒体卷中
Django app with docker-compose keep the data in media volume
我将 Django cookiecutter 与 docker 和 docker-compose 一起使用。
在制作中,我使用 dj-static 来提供我的媒体文件。
每当我使用 'docker-compose down' 命令时,媒体卷中的所有内容都会被删除。我认为这是该命令的预期结果,但 'postgreSQL' 中的所有内容都会保留。
我如何使用 'media' 音量来做到这一点?
您应该添加额外的卷来保存您的媒体文件文件夹:
- /path/to/store/on/host:/path/to/mediafiles
我成功完成了这项工作。
在 docker-compose.yml 我添加了:
volumes:
media: {}
django:
....
volumes:
- media:/app/project-name/same-path-as-MEDIA_URL
我在 compose/django Dockerfile 中添加了:
VOLUME /app/PROJECT_NAME/same-path-as-MEDIA_URL
进行此更改后,我 运行 docker-compose build,docker-compose up 出现了 500 错误。要传递这个(如果你没有修改 django cookiecutter 的默认设置):
docker ps - here you'll get your django container id
docker exec -u root THE_CONTAINER_ID chown django:user PROJECT_NAME/same-path-as-MEDIA_URL
在这里留下一个撰写文件。我正在保留数据库、媒体和弹性搜索数据。这对于那些很难确定将当前答案放在哪里的人很有用。
version: '3.3'
services:
# elastic search service
elasticsearch:
image: elasticsearch:6.5.4
ports:
- '9400:9200'
volumes:
- elastic-data:/usr/share/elasticsearch/data
# Postgres database service
postgres:
image: postgres:9.6-alpine
environment:
POSTGRES_DB: dilirena
POSTGRES_USER: dilirenauser
POSTGRES_PASSWORD: pa55w0rd
ports:
- '5435:5432'
volumes:
- postgres-data:/var/lib/postgresql/data
# drf restful api service
api:
build: .
command: python manage.py runserver 0.0.0.0:8081
volumes:
- .:/app
- media:<media-path>
ports:
- '8081:8081'
env_file:
- ./.env
links:
- postgres
- elasticsearch
depends_on:
- postgres
- elasticsearch
volumes:
elastic-data:
postgres-data:
media:
我在 mac,不确定它是否有影响。
我将 Django cookiecutter 与 docker 和 docker-compose 一起使用。
在制作中,我使用 dj-static 来提供我的媒体文件。
每当我使用 'docker-compose down' 命令时,媒体卷中的所有内容都会被删除。我认为这是该命令的预期结果,但 'postgreSQL' 中的所有内容都会保留。
我如何使用 'media' 音量来做到这一点?
您应该添加额外的卷来保存您的媒体文件文件夹:
- /path/to/store/on/host:/path/to/mediafiles
我成功完成了这项工作。
在 docker-compose.yml 我添加了:
volumes:
media: {}
django:
....
volumes:
- media:/app/project-name/same-path-as-MEDIA_URL
我在 compose/django Dockerfile 中添加了:
VOLUME /app/PROJECT_NAME/same-path-as-MEDIA_URL
进行此更改后,我 运行 docker-compose build,docker-compose up 出现了 500 错误。要传递这个(如果你没有修改 django cookiecutter 的默认设置):
docker ps - here you'll get your django container id
docker exec -u root THE_CONTAINER_ID chown django:user PROJECT_NAME/same-path-as-MEDIA_URL
在这里留下一个撰写文件。我正在保留数据库、媒体和弹性搜索数据。这对于那些很难确定将当前答案放在哪里的人很有用。
version: '3.3'
services:
# elastic search service
elasticsearch:
image: elasticsearch:6.5.4
ports:
- '9400:9200'
volumes:
- elastic-data:/usr/share/elasticsearch/data
# Postgres database service
postgres:
image: postgres:9.6-alpine
environment:
POSTGRES_DB: dilirena
POSTGRES_USER: dilirenauser
POSTGRES_PASSWORD: pa55w0rd
ports:
- '5435:5432'
volumes:
- postgres-data:/var/lib/postgresql/data
# drf restful api service
api:
build: .
command: python manage.py runserver 0.0.0.0:8081
volumes:
- .:/app
- media:<media-path>
ports:
- '8081:8081'
env_file:
- ./.env
links:
- postgres
- elasticsearch
depends_on:
- postgres
- elasticsearch
volumes:
elastic-data:
postgres-data:
media:
我在 mac,不确定它是否有影响。