Jul*_*ova 7 python ssl flask docker
我有一个带有 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)
Run Code Online (Sandbox Code Playgroud)
在我的机器上,我简单地运行它
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"]
Run Code Online (Sandbox Code Playgroud)
并尝试以不同的方式运行它。我可以看到“在https://127.0.0.1:5000/ 上运行(按 CTRL+C 退出)”消息,但无法在浏览器中打开页面。我究竟做错了什么?
这是一个相当简单的修复,您必须更改此行:
app.run(debug=True, host='127.0.0.1', port=5000, ssl_context=ctx)
Run Code Online (Sandbox Code Playgroud)
到
app.run(debug=True, host='0.0.0.0', port=5000, ssl_context=ctx)
Run Code Online (Sandbox Code Playgroud)
你必须从容器的角度思考:容器有自己的“localhost”,它与宿主机的localhost不同,所有这些都意味着flask从未收到过请求。
因此,您可以简单地绑定到容器内的所有 IP,这是通过绑定到“0.0.0.0”来完成的。
| 归档时间: |
|
| 查看次数: |
4501 次 |
| 最近记录: |