首页 > 解决方案 > Docker 在卷中运行应用程序

问题描述

在我的 django docker 应用程序中,我会使用一个卷来管理我的应用程序文件,这是我的 Dockerfile:

FROM python:3.6-alpine
EXPOSE 8000
RUN apk update
RUN apk add --no-cache make linux-headers libffi-dev jpeg-dev zlib-dev
RUN apk add postgresql-dev gcc python3-dev musl-dev

VOLUME /var/lib/cathstudio/data
WORKDIR /var/lib/cathstudio/data

COPY ./requirements.txt .

RUN pip install --upgrade pip
RUN pip install -t /var/lib/cathstudio/data -r requirements.txt
ENV PYTHONUNBUFFERED 1
ENV PYTHONPATH /var/lib/cathstudio/data

COPY . /var/lib/cathstudio/data

ENTRYPOINT python /var/lib/cathstudio/data/manage.py runserver 0.0.0.0:8000

但是当我运行我的应用程序时:

docker run -d -it --rm --link postgres:postgres --name=cathstudio myrepo/app_studio:latest

我明白了

python:无法打开文件'/var/lib/cathstudio/data/manage.py':[Errno 2]没有这样的文件或目录

如果我在我的 Dockerfile 中只写ENTRYPOINT python manage.py runserver 0.0.0.0:8000

我的文件哪里错了?如何使用存储应用程序文件的卷运行我的应用程序?

非常感谢提前

标签: pythondjangodockerdockerfile

解决方案


您可以尝试使用 -v 标志而不是在 dockerfile 中使用 VOLUME 吗,我不确定为什么,但是 VOLUME 创建了确切的空卷,而不是与所有数据一起安装:

从 docker 文件中删除 VOLUME 部分并尝试以下操作

docker run -d -it --rm -v /var/lib/cathstudio/data/:/var/lib/cathstudio/data --link postgres:postgres --name=cathstudio myrepo/app_studio:latest

推荐阅读