我有一个在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上的一个共享文件夹中。
1条答案
按热度按时间dy2hfwbg1#
首先,你应该清理你的docker文件。您设置了workdir并复制了两次,并且您的第一个系统级pip构建基于您要放弃的目录。如果你要设置许可用户和适当的目录,这应该包括一个virtualenv,而不是安装到镜像的python版本,更不用说做两次了。
因为这还没有被清理,所以你的docker-compose.yml实际上并没有绑定到你的工作目录。指定卷时,它绑定到旧的工作目录
然而,您的应用程序是在DockerFile中指定的/home/app/web上工作的,并且由于它没有绑定到任何卷,因此不会反映任何模板更改。实际上,任何更改都被移植过来,这有点令人困惑。