更改后在Docker中重新启动Flask应用

use*_*342 1 python flask docker flask-script

我正在使用flask-script运行我的应用程序:

if __name__ == "__main__":
    manager.run()
Run Code Online (Sandbox Code Playgroud)

在泊坞窗中,我有以下内容:

CMD [ "python", "manage.py", "runserver", "-h", "0.0.0.0", "-p", "5000"]
Run Code Online (Sandbox Code Playgroud)

现在,当我构建并运行容器时,应用程序运行良好。但是,即使我的环境设置了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"]
Run Code Online (Sandbox Code Playgroud)

R0M*_*RMY 5

COPY指令

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

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


如果要在容器内更改文件,可以将主机目录作为卷挂载。也是从文档

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

Docker run命令可能看起来像这样

docker run -d -v /absolute/path/to/src:/app <image-name>
Run Code Online (Sandbox Code Playgroud)

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


您可能也对本文感兴趣,可在Docker Compose上使用Dockerize Flask,Celery和Redis应用程序。它进一步迈出了一步,并使用Docker Compose来协调Flask开发环境。