Lightsail容器升级Python3.11后健康检查出现SSL EOF错误
问题:Lightsail容器更新至Python3.11+Debian Bookworm后出现SSL.SSLEOFError错误
我最近将主Lightsail容器更新为使用Python3.11、venv和Debian Bookworm作为基础镜像。此前基于bullseye+Python3.10部署时未出现该问题。镜像在本地运行正常,偶尔AWS会忽略SSL错误允许部署,部署后容器也能正常工作,但会触发以下错误:
[12/Nov/2023:16:26:05] Error on request: [12/Nov/2023:16:26:05] Traceback (most recent call last): [12/Nov/2023:16:26:05] File "/opt/venv/lib/python3.11/site-packages/werkzeug/serving.py", line 362, in run_wsgi [12/Nov/2023:16:26:05] execute(self.server.app) [12/Nov/2023:16:26:05] File "/opt/venv/lib/python3.11/site-packages/werkzeug/serving.py", line 326, in execute [12/Nov/2023:16:26:05] write(data) [12/Nov/2023:16:26:05] File "/opt/venv/lib/python3.11/site-packages/werkzeug/serving.py", line 301, in write [12/Nov/2023:16:26:05] self.wfile.write(data) [12/Nov/2023:16:26:05] File "/usr/lib/python3.11/socketserver.py", line 834, in write [12/Nov/2023:16:26:05] self._sock.sendall(b) [12/Nov/2023:16:26:05] File "/usr/lib/python3.11/ssl.py", line 1241, in sendall [12/Nov/2023:16:26:05] v = self.send(byte_view[count:]) [12/Nov/2023:16:26:05] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [12/Nov/2023:16:26:05] File "/usr/lib/python3.11/ssl.py", line 1210, in send [12/Nov/2023:16:26:05] return self._sslobj.write(data) [12/Nov/2023:16:26:05] ^^^^^^^^^^^^^^^^^^^^^^^^ [12/Nov/2023:16:26:05] ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:2393)
我尝试过调整openssl配置及其他在Python3.10下有效的设置,但均无效。推测这可能是AWS健康检查处理SSL的方式导致的问题。
以下是我的Dockerfile核心内容:
FROM amd64/postgres # RUN apt-get update python-deps and some other stuff RUN mkdir -p /etc/apt/keyrings ENV PYTHONUNBUFFERED 1 WORKDIR /app/ RUN python3 -m venv /opt/venv # Enable venv ENV PATH="/opt/venv/bin:$PATH" COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --upgrade pip \ && pip install --no-cache-dir -Ur requirements.txt RUN chmod +x start_api.sh
以及start_api.sh的内容:
#!/bin/bash set -Eeuo pipefail openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \ -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.redacted.com" \ -keyout server.key -out server.cert FLASK_ENV=development export FLASK_APP=backend FLASK_APP=backend flask run --host 0.0.0.0 --port 443 --cert=server.cert --key=server.key
我知道在生产环境中运行Flask自带服务器并不合适,但目前这只是我的测试环境。
内容的提问来源于stack exchange,提问作者Christopher Wrogg
相关产品推荐
相关产品推荐

