目前项目中使用commons-crypto进行数据流的加解密,在本地开发调试过程中都一切正常,但是打包到docker运行一直报连接libcrypto.so异常,通过ssh到容器发现的确没有这个so。我们知道这个动态链接库是openssl-devel(centos)、libssl-dev(ubuntu)提供的,所以我们在Dockerfile中加上如下代码。

RUN apt apt install -y openssl libssl-dev

结果构建无法通过,通过日志发现libssl-dev没有在apt本地缓存信息中找到,所以我们在install之前需要执行apt updata。

RUN apt update && apt install -y openssl libssl-dev

重新启动容器后连接libcrypto.so异常解决,却出现一个Java UnsatisfiedLinkError: EVP_CIPHER_CTX_cleanup的异常。我们知道openssl从1.0升级到1.1废弃了很多方法,所以我们尝试指定版本安装openssl支持。

RUN apt update && apt install -y openssl=1.0.2 libssl-dev=1.0.2

很不幸,构建中发现无法安装这个这个指定版本,通过apt-cache madison openssl 查看支持版本,最低都是1.1.0g-2ubuntu4~~~~。然后去Apache官网,搜这个issues发现已经有人提交了,并且官方都合并进主干了,但是就是没有release版本~~~,没法自己本地打包然后再依赖进项目,OK问题解决。