Docker不允许在Django Web应用中更改模板文件

tf7tbtn2  于 2023-05-28  发布在  Docker
关注(0)|答案(1)|浏览(129)

我有一个在Docker中运行的Django应用程序,虽然我可以更改.py文件,但由于某种原因(我假设Docker阻止了写访问),我不能将更改保存到模板文件。有没有一种方法可以避免容器旋转?
docker-compose.yml

version: '3.8'

services:
  web:
    build: ./app
    command: gunicorn -w 3 myapp.wsgi:application --bind 0.0.0.0:8000 --reload
    volumes:
      - ./app/:/usr/src/app
      - ./static/:/home/app/web/static
      - ./media/:/home/app/web/media
    expose:
      - 8000
    env_file:
      - ./.env
    restart: unless-stopped
  nginx:
    build: ./nginx
    volumes:
      - ./static/:/home/app/web/static
      - ./media/:/home/app/web/media
    ports:
      - 7000:80
    depends_on:
      - web

Dockerfile

###########
# BUILDER #
###########

# pull official base image
FROM python:3.9.6-alpine as builder

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev

# install dependencies
RUN pip install --upgrade pip
COPY . .
COPY ./requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt

#########
# FINAL #
#########

# pull official base image
FROM python:3.9.6-alpine

# create directory for the app user
RUN mkdir -p /home/app

# create the app user
RUN addgroup -S app && adduser -S app -G app
    
# create the appropriate directories
ENV HOME=/home/app
ENV APP_HOME=/home/app/web
RUN mkdir $APP_HOME
RUN mkdir $APP_HOME/static
RUN mkdir $APP_HOME/media
WORKDIR $APP_HOME

# install dependencies
RUN apk update && apk add libpq
COPY --from=builder /usr/src/app/wheels /wheels
COPY --from=builder /usr/src/app/requirements.txt .
RUN pip install --no-cache /wheels/*

# copy project
COPY . $APP_HOME

# chown all the files to the app user
RUN chown -R app:app $APP_HOME

# change to the app user
USER app

Docker部署在Synology NAS上的一个共享文件夹中。

dy2hfwbg

dy2hfwbg1#

首先,你应该清理你的docker文件。您设置了workdir并复制了两次,并且您的第一个系统级pip构建基于您要放弃的目录。如果你要设置许可用户和适当的目录,这应该包括一个virtualenv,而不是安装到镜像的python版本,更不用说做两次了。
因为这还没有被清理,所以你的docker-compose.yml实际上并没有绑定到你的工作目录。指定卷时,它绑定到旧的工作目录

- ./app/:/usr/src/app

然而,您的应用程序是在DockerFile中指定的/home/app/web上工作的,并且由于它没有绑定到任何卷,因此不会反映任何模板更改。实际上,任何更改都被移植过来,这有点令人困惑。

相关问题