我有一个带SSL授权的烧瓶应用程序。 这是我的run.py:
#!flask/bin/python
from app import app
import ssl
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
ctx.load_cert_chain('sertnew/se-emulator.crt', 'sertnew/se-emulator.key')
app.run(debug=True, host='127.0.0.1', port=5000, ssl_context=ctx)
在我的机器上,我只是用它来运行它
python run.py
然后我在chrome中打开https://localhost:5000并且它有效(有一条非安全连接的消息,但对我来说没问题)
现在我正试图让它在Docker容器中运行。 我有一个像这样的Dockerfile:
FROM python:3.5-slim
RUN apt-get update && apt-get install -y python3-pip
COPY . /storage-emulator
WORKDIR /storage-emulator
RUN pip3 install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["run.py"]
并尝试以不同方式运行它。 我可以看到“正在运行https://127.0.0.1:5000/(按CTRL + C退出)”消息,但无法在浏览器中打开该页面。我做错了什么?
答案 0 :(得分:3)
这是一个相当容易的修复,您必须更改此行:
app.run(debug=True, host='127.0.0.1', port=5000, ssl_context=ctx)
到
app.run(debug=True, host='0.0.0.0', port=5000, ssl_context=ctx)
你必须从容器的角度思考:容器有自己的“localhost”,它与主机的localhost不同,所有这一切都意味着烧瓶从未收到过请求。
因此,您可以简单地绑定到容器中的所有IP,这是通过绑定到“0.0.0.0”来完成的。