You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker镜像中引入libssl.so.1.1解决运行依赖报错

解决Docker镜像中OpenSSL 1.1依赖缺失问题

本地基于Ubuntu 20.04(自带OpenSSL 1.1)编译的g++单文件服务器程序,放入默认Ubuntu镜像(默认是22.04及以上版本,自带OpenSSL 3)构建的Docker镜像后,运行报错:

./svr: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

原Dockerfile如下:

FROM ubuntu
ARG APPDIR=/usr/local/myserver
WORKDIR ${APPDIR}

# copy my single server program file
COPY build/bin/svr ./

# install openssl into the image
RUN apt-get -y update
RUN apt-get -y install openssl
#RUN apt-get -y install libssl-dev

# run the server program
EXPOSE 1080
EXPOSE 1443
CMD ./svr

以下是几种优雅的解决方案:

方案1:使用与本地编译环境匹配的Ubuntu基础镜像

本地编译环境为Ubuntu 20.04,直接指定该版本的Ubuntu镜像作为基础镜像,镜像内默认的OpenSSL版本就是1.1,与程序依赖完全匹配,无需额外调整:

修改后的Dockerfile:

FROM ubuntu:20.04
ARG APPDIR=/usr/local/myserver
WORKDIR ${APPDIR}

COPY build/bin/svr ./

RUN apt-get -y update && apt-get -y install openssl

EXPOSE 1080
EXPOSE 1443
CMD ./svr

方案2:静态编译程序,消除动态库依赖

编译程序时将OpenSSL及其他依赖静态链接到可执行文件中,镜像无需安装任何OpenSSL相关包,程序即可独立运行:

编译命令示例(g++):

g++ -o build/bin/svr your_source_code.cpp -static-libstdc++ -lssl -lcrypto -static

修改后的Dockerfile可简化为:

FROM ubuntu:latest
ARG APPDIR=/usr/local/myserver
WORKDIR ${APPDIR}

COPY build/bin/svr ./

EXPOSE 1080
EXPOSE 1443
CMD ./svr

方案3:在新版Ubuntu镜像中安装OpenSSL 1.1包(适用于必须用新版镜像的场景)

如果需要基于Ubuntu 22.04及以上版本构建镜像,可通过安装libssl1.1包补充缺失的依赖:

修改后的Dockerfile:

FROM ubuntu:latest
ARG APPDIR=/usr/local/myserver
WORKDIR ${APPDIR}

COPY build/bin/svr ./

RUN apt-get -y update && apt-get -y install libssl1.1

EXPOSE 1080
EXPOSE 1443
CMD ./svr

注意:部分新版Ubuntu镜像可能需要先启用universe源,可在apt-get update前添加:

RUN apt-get -y update && apt-get -y install software-properties-common && add-apt-repository universe

内容的提问来源于stack exchange,提问作者Zhou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:07:58