我正在尝试通过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 上运行时,这就是消息的含义。