python3:在“ app.py”中找不到“ __main__”模块

时间:2018-08-24 14:06:42

标签: python docker flask containers

我正在尝试创建一个Docker容器,以便能够使用Flask创建一个GUI以利用张量流模型。 事实是,我希望能够实时修改python文件,而不必每次都重建容器。

因此,到目前为止,我已经创建了3个文件:

requirement.txt

Flask
tensorflow
keras

Dockerfile

# Use an official Python runtime as a parent image
FROM python:3.5.6-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python3", "app.py"]

app.py

from flask import Flask
import os
import socket

app = Flask(__name__)

@app.route("/")
def test():
html = "<h3>Hello {name}!</h3>" \
       "<b>Hostname:</b> {hostname}<br/>"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname())

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

所以毕竟,我使用此命令构建容器

docker build -t modelgui .

结束,然后使用此命令运行容器,并在要在主机上修改的应用文件与容器中的应用文件之间建立链接

docker run -p 4000:80 -v /home/Documents/modelGUI:/app modelgui

但是我得到了这个错误,我真的不知道为什么

/usr/local/bin/python3: can't find '__main__' module in 'app.py'

我的问题可能很愚蠢,无法解决,但我真的被困在这里。

2 个答案:

答案 0 :(得分:0)

在本地运行此命令,看起来好像是在装入卷覆盖了目录:

没有音量

docker run -it test_image bash
root@c3870b9845c3:/app# ls
Dockerfile  app.py  requirements.txt
root@c3870b9845c3:/app# python app.py
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

有音量

docker run -it -v ~/Barings_VSTS/modelGUI:/app test_image bash
root@f6349f899079:/app# ls
somefile.txt
root@f6349f899079:/app#

这可能是问题的一部分。如果要在其中装载文件系统,我会将其装载到另一个目录中。默认的卷行为是,复制到app的内容将被modelGUI的内容覆盖

答案 1 :(得分:0)

检查绑定卷安装中的 / home / Documents / modelGUI 是代码文件所在的路径,并且未创建该路径中的 app.py 作为目录,而不是包含要运行代码的python文件。

如果 / home / Documents / modelGUI 中的 app.py 是目录,则此问题的原因是未调用脚本 app。 py ,您只是给Python解释器提供了一个不存在的脚本名称,如果存在一个类似名称的目录(实际上不区分大小写),它将尝试执行该脚本。

我试图复制:

$ ls -lFs
Dockerfile
app.py/
requirements.txt

然后使用 app.py 调用Python解释器:

$ python3 app.py
/usr/local/bin/python3: can't find '__main__' module in 'app.py'