Docker中的Django-启动Django应用文件的入口点

问题描述 投票:0回答:1

目前,我正在尝试构建Django应用,其他用户应该可以用作Docker-Container。我希望他们轻松执行运行命令或启动预写的docker-compose文件以启动容器。

现在,我在数据持久性方面遇到问题。我在docker-compose中使用volume标志,例如,将主机的本地文件夹绑定安装到容器中,其中应用程序数据和配置文件位于容器中。主机文件夹在第一次运行时是空的,因为用户刚刚安装了docker并且正在启动docker-compose。

由于这是绑定安装,据我所知,空文件夹将覆盖Docker中的文件夹,因此包含Django-App的Container-Folder现在为空,因此无法启动。

我进行了一些搜索,据我所知,我需要创建一个entrypoint.sh文件,该文件在启动后将应用程序数据文件夹复制到容器的文件夹中,该卷位于该文件夹中。

现在我的问题:

  1. 是否存在关于如何通过entrypoint.sh文件复制文件的最佳做法?
  2. 在运行1.并且文件已经存在之后,第二次运行该怎么办,如何不使用temp文件夹中的默认配置文件覆盖可能更改的配置文件?

我现在的示例代码:

Dockerfile

# pull official base image
FROM python:3.6

# set work directory
RUN mkdir /app
WORKDIR /app


# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# copy project
COPY . /app/

# install dependencies
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

#one of my tries to make data persistent
VOLUME /app

docker-compose.yml

version: '3.5'
services:
  app:
    image: app:latest
    ports:
      - '8000:8000'
    command: python manage.py runserver 0.0.0.0:8000
    deploy:
        replicas: 1
        restart_policy:
          condition: on-failure
    volumes:
        - /folder/to/app/data:/app
    networks:
      - overlay-core
networks:
    overlay-core:
      external: true

entrypoint.sh

#empty for now

python django docker docker-compose persistence
1个回答
0
投票

您应该重组应用程序,以将应用程序代码及其数据存储在不同的目录中。即使数据是应用程序的子目录,也足够了。完成此操作后,您可以仅绑定安装数据目录,并保留映像中的应用程序代码不变。

version: '3.5'
services:
  app:
    image: app:latest
    ports:
      - '8000:8000'
    volumes:
      - ./data:/app/data # not /app

没有特别的理由在Dockerfile中放置VOLUME声明,但是您应该声明CMD您的映像应在其中运行。

© www.soinside.com 2019 - 2024. All rights reserved.