【发布时间】:2020-05-22 05:15:01
【问题描述】:
部署了一个flask应用并将其绑定到ssl证书以在“https:”上运行,代码如下:
if __name__ == '__main__':
path = "/usr/local/nginx/ssl/"
context = (path + 'abc.crt' , path + 'abc.key')
app.run_server(debug=True,host='0.0.0.0',ssl_context=context)
现在当我直接通过 python (python scriptname.py) 运行这个脚本时,它工作正常, 但是,当我在 docker 容器中运行时,出现以下错误:
Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/threading.py", line 916, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.6/threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 1005, in inner
fd=fd,
File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 848, in make_server
host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd
File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 766, in __init__
self.socket = ssl_context.wrap_socket(sock, server_side=True)
File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 661, in wrap_socket
**kwargs
File "/usr/local/lib/python3.6/ssl.py", line 1158, in wrap_socket
ciphers=ciphers)
File "/usr/local/lib/python3.6/ssl.py", line 750, in __init__
self._context.load_cert_chain(certfile, keyfile)
FileNotFoundError: [Errno 2] No such file or directory
我猜容器正在其他地方搜索文件,这是我的 docker run 命令:
docker run -it --network="host" -p 8050:8050 -v /home/a/b/c:/app abc:1.1
我在这里缺少什么?
编辑:Dockerfile
FROM python:3.6
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
ENTRYPOINT ["python"]
CMD ["app.py"]
【问题讨论】:
-
请在此处发布 Dockerfile
-
@MeiramChuzhenbayev 编辑完成。
-
为什么你有
path=" "这在 docker 文件中不起作用。因为你的应用在/app -
@TarunLalwani 路径不是上面提到的空白,我上面没有指定。
-
Docker 容器将只能访问您在其中复制的内容或在运行时映射到其中的内容。所以你有2个选择。一个添加 COPY 语句来复制证书,但是查看当前的 docker 文件,您的证书在
app文件夹之外,因此没有被复制。因此,您应该在运行容器时使用-v选项来映射证书。docker run -it --network="host" -p 8050:8050 -v /home/certs/path:/home/certs/path -v /home/a/b/c:/app abc:1.1
标签: python docker flask plotly-dash