在更改中重新启动docker中的flask应用程序

时间:2016-10-25 21:40:45

标签: python docker flask flask-script

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

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

在码头工具中,我有以下内容:

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

现在,当我构建并运行我的容器时,应用运行正常。但是,如果我对我的代码进行了更改并保存应用程序不会重新启动,尽管我的env具有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"]

1 个答案:

答案 0 :(得分:4)

COPY指令

  

从< src>复制新文件或目录并将它们添加到路径< dest>。

的容器的文件系统中

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

如果您希望在容器内更改文件,可以mount a host directory as a volume。也来自文档

  

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

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

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

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

您可能也对此帖Dockerize a Flask, Celery, and Redis Application with Docker Compose感兴趣。它更进一步,并使用Docker Compose来协调Flask开发环境。