Docker部署Python API项目时缺失libssl.so.1.1的解决求助
我看到你在Docker部署Python API项目时碰到了libssl.so.1.1: cannot open shared object file: No such file or directory的报错,尝试安装libssl-dev却没解决问题,我来帮你梳理下问题根源和可行的解决办法。
首先,你的Dockerfile里有个明显的命令错误
你写的安装SSL依赖的命令少了关键的install参数,而且没有自动确认的-y选项,这会导致命令执行失败,根本没装上需要的依赖!原命令:
RUN apt-get update && apt-get libssl-dev
正确的写法应该是:
RUN apt-get update && apt-get install -y libssl1.1 libssl-dev
这里直接指定安装libssl1.1包(libssl-dev是开发包,不一定包含运行时需要的libssl.so.1.1文件),-y参数能避免构建过程中出现交互确认,保证构建顺利完成。
方案一:修正基础镜像的依赖安装(推荐)
你的基础镜像是python:3.10-slim-buster,基于Debian 10(Buster),这个系统默认是自带libssl.so.1.1的,但可能因为slim镜像的精简特性,部分包被移除了。按照上面的修正命令重新构建镜像,应该就能找到这个文件了。
另外,建议调整Dockerfile的命令顺序,先安装系统依赖,再安装Python相关包,这样能确保系统依赖在Python包安装前就准备好,避免依赖缺失:
# syntax=docker/dockerfile:1 ARG PYTHON_VERSION=3.10 FROM python:${PYTHON_VERSION}-slim-buster as base ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 # 先安装系统依赖,同时清理缓存减小镜像体积 RUN apt-get update && \ apt-get install -y libssl1.1 libssl-dev && \ rm -rf /var/lib/apt/lists/* COPY . / RUN pip install pipenv # 先装系统依赖再装PaddlePaddle,避免依赖问题 RUN pipenv run python3 -m pip install paddlepaddle-gpu==2.5.1.post102 -f https://www.paddlepaddle.org.cn/whl/linux/cudnnin/stable.html RUN pipenv install --verbose --pypi-mirror https://pypi.tuna.tsinghua.edu.cn/simple EXPOSE 5000 # 启动应用(替换回你的实际启动命令) CMD ["python", "your_api_main_file.py"]
方案二:如果要使用Ubuntu 22.04的镜像
如果你想和本地系统(Ubuntu 22.04)保持一致,可以换成python:3.10-slim-jammy(Jammy是Ubuntu 22.04的代号),但Ubuntu 22.04默认用的是libssl3,没有libssl.so.1.1。这时候需要添加Debian Buster的源来安装兼容包:
RUN echo "deb http://deb.debian.org/debian buster main" >> /etc/apt/sources.list.d/buster.list && \ apt-get update && \ apt-get install -y --no-install-recommends libssl1.1 && \ rm /etc/apt/sources.list.d/buster.list && \ rm -rf /var/lib/apt/lists/*
这样临时添加Buster的源获取libssl1.1,安装后移除源,避免后续包冲突。
验证方法
构建镜像后,你可以先进入容器检查文件是否存在:
docker run -it --rm your-image-name bash
然后执行:
find / -name libssl.so.1.1
如果能找到文件路径,说明依赖安装成功,再启动你的API应用应该就不会报错了。
备注:内容来源于stack exchange,提问作者Jianing JIA

