如何解决Docker内部Flask应用程序上的热重装问题?

时间:2019-05-27 20:54:16

标签: python-3.x docker flask docker-compose dockerfile

我希望我的flask应用程序在docker容器中以热重载的方式运行,但是如果我将app.py flask应用程序更改为app.run(debug=True,host='0.0.0.0')而不是False,则会引发错误:
< / p>

FileNotFoundError:[错误2]无此文件或目录:'/app/app.py':'/app/app.py'


如果我改回到False

app.run(debug=False,host='0.0.0.0')

它将运行,但不会热装。

我的Dockerfile是:

    FROM ubuntu:latest
    RUN apt-get update -y
    RUN apt-get install -y python3-pip python3-dev build-essential locales
    RUN locale-gen en_US.UTF-8  
    ENV LANG en_US.UTF-8  
    ENV LANGUAGE pt_BR:pt:en  
    ENV LC_ALL en_US.UTF-8
    ENV FLASK_ENV="development"
    WORKDIR /app 
    COPY . /app
    VOLUME ["/app"]
    RUN pip3 install -r requirements.txt
    ENTRYPOINT ["python3"]
    CMD ["app.py"]

,然后使用以下命令运行它:
docker run -p 5000:5000 -v /Users/rodrigodmpa/Documents/IA/web:/app flask-app

1 个答案:

答案 0 :(得分:0)

我看到Dockerfile有一些问题。我认为您当前的问题是df = dfa.dropna(subset = ['column name']) 行。您已将代码静态复制到映像中,并声明运行该映像的容器正在VOLUME ["/app"]位置导出卷,然后将具有绑定装入卷的容器启动到同一位置。可能会导致一些权限问题,最终导致容器不再看到/app的内容。您不需要/app声明,因此放弃它。

还:始终将VOLUMEapt-get update放在相同的apt-get install声明中。如果不这样做,则编辑安装的软件包,默认情况下,Docker将缓存上一个命令中的层。这意味着您可能很久以前就已经根据软件包定义安装了软件包。它看起来应该像RUN