【问题标题】:Django app with docker-compose keep the data in media volume带有 docker-compose 的 Django 应用程序将数据保存在媒体卷中
【发布时间】:2023-03-26 09:58:01
【问题描述】:

我将 Django cookiecutter 与 docker 和 docker-compose 一起使用。

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

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

如何使用“媒体”音量来做到这一点?

【问题讨论】:

    标签: django docker docker-compose cookiecutter-django


    【解决方案1】:

    您应该包括额外的卷来保存您的 mediafiles 文件夹:

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

    【讨论】:

    • 那应该去哪里?在 'django' 服务下的 .yml 文件上?
    • 是的,在 docker-compose.yml 中,在 django/volumes 部分中
    【解决方案2】:

    我已经成功地完成了这项工作。

    在我添加的 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
    

    【讨论】:

      【解决方案3】:

      在此处留下一个撰写文件。我正在持久化数据库、媒体和弹性搜索数据。这对于那些难以确定将当前答案给出的内容放在哪里的人来说应该很有用。

      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 上,不确定它是否会有所作为。

      【讨论】:

        猜你喜欢
        • 2020-07-15
        • 2021-04-23
        • 2022-08-10
        • 2021-10-09
        • 2019-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多