带有docker-compose的Django应用程序将数据保存在媒体卷中

时间:2017-07-11 13:02:18

标签: django docker docker-compose cookiecutter-django

我正在使用带有docker和docker-compose的Django cookiecutter。

在制作时,我使用dj-static来提供媒体文件。

每当我使用' docker-compose down'命令删除媒体卷中的所有内容。我认为这是该命令的预期结果,但是在postgreSQL'保留。

我怎样才能使用'媒体'音量?

3 个答案:

答案 0 :(得分:1)

您应该包含其他卷以保留mediafiles文件夹:

- /path/to/store/on/host:/path/to/mediafiles

答案 1 :(得分:1)

我已成功完成这项工作。

在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

答案 2 :(得分:0)

在此处保留撰写文件。我正在坚持数据库,媒体和弹性搜索数据。这对于那些很难确定将当前答案给出在哪里的人有用。

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上,不确定是否会有所帮助。