4

我正在使用烧瓶脚本来运行我的应用程序:

if __name__ == "__main__":
    manager.run()

在 docker 我有以下内容:

CMD [ "python", "manage.py", "runserver", "-h", "0.0.0.0", "-p", "5000"]

现在,当我构建并运行我的容器时,应用程序运行良好。但是,如果我对代码进行更改并保存,尽管我的环境设置了 DEBUG=True 变量,但应用程序不会重新启动。我在这里错过了什么吗?

Dockerfile:

FROM python:3.4-slim

RUN apt-get update -y && \
    apt-get install -y \
        python-pip \
        python-dev \
        pkg-config \
        libpq-dev \
        libfreetype6-dev

COPY ./requirements.txt /app/requirements.txt

WORKDIR /app

RUN pip3 install -r requirements.txt

COPY . /app

CMD [ "python", "manage.py", "runserver"]
4

1 回答 1

8

COPY指令

从 <src> 复制新文件或目录并将它们添加到路径 <dest> 的容器文件系统中。

这意味着映像具有构建映像时文件的快照。当您从该映像启动容器时,它将在其文件系统中看到您的文件副本。修改原始文件不会对容器内的副本产生任何影响,应用程序看不到这些更改并且不会重新启动。


如果您希望文件在容器内更改,您可以将主机目录挂载为卷。也来自文档

此命令将主机目录 /src/webapp 挂载到位于 /webapp 的容器中。如果路径 /webapp 已经存在于容器的映像中,则 /src/webapp 挂载会覆盖但不会删除预先存在的内容。移除挂载后,即可再次访问内容。

Docker 运行命令可能看起来像这样

docker run -d -v /absolute/path/to/src:/app <image-name>

然后您的文件更改应该反映在容器内的文件中(因为它们将是相同的文件)并且一切都应该按预期重新启动。


您可能还对这篇文章感兴趣Dockerize a Flask, Celery, and Redis Application with Docker Compose。它更进一步,使用 Docker Compose 来编排 Flask 开发环境。

于 2016-10-27T04:42:17.530 回答