我正在尝试通过Docker运行Flask应用程序。我上周工作了,但是现在给了我一些问题。我可以启动服务器,但是似乎无法通过浏览器访问任何内容。

这是我的app.py文件(精简版):

... imports ...
app = Flask(__name__)
DATABASE = "users.db"
app.secret_key = os.environ["SECRET_KEY"]
app.config['UPLOAD_FOLDER'] = 'static/Content'

BASE_PATH = os.path.dirname(os.path.abspath(__file__))

# For Dropbox
__TOKEN = os.environ["dbx_access_token"]
__dbx = None

... functions ...


if __name__ == '__main__':
     app.run(port=5001, threaded=True, host=('0.0.0.0'))

这是我的Dockerfile:
# Use an official Python runtime as a parent image
FROM python:3

# Set the working directory to /VOSW-2016-original
WORKDIR /VOSW-2016-original

# Copy the current directory contents into the container at /VOSW-2016-original
ADD . /VOSW-2016-original

# Putting a variables in the environment
ENV SECRET_KEY="XXXXXXXX"
ENV dbx_access_token="XXXXXXXX"

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

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

# Run app.py when the container launches
CMD ["python", "app.py", "--host=0.0.0.0"]

这是我用来启动服务器的命令:
docker build -t vosw_original ./VOSW-2016-original/

然后:
docker run -i -t -p 5001:8000 vosw_original

然后我得到消息:
* Running on http://0.0.0.0:5001/ (Press CTRL+C to quit)

因此服务器似乎正在运行,但是执行以下任何操作时我似乎都无法访问它:
  • http://0.0.0.0:5001/
  • http://0.0.0.0:8000/
  • http://127.0.0.1:5001/
  • http://127.0.0.1:8000/

  • 我要去哪里错了?

    最佳答案

    您在错误的端口上运行应用程序:

    app.run(port=5001, threaded=True, host=('0.0.0.0'))
    

    同时暴露8000。因此,通过-p 5001:8000,您可以将容器的8000端口(没有监听的端口)映射到主机的5001端口。当您的应用程序实际在容器内的端口5001 上运行时,这就是消息的含义。

    09-11 02:09