曾静的博客

但行好事,莫问前程.

嗨,我是曾静 (@devzeng),目前暂居深圳。


这是我用来记录平日学习笔记的地方,欢迎您的访问.

Docker配置JDK的Security Provider

最近将之前写的一个消息通知的服务支持通过Docker进行部署,以前一直都是通过命令行启动的。一般的流程就是编写Dockerfile文件编译镜像运行容器就大功告成了。

Dockerfile配置如下:

FROM openjdk:8
VOLUME /tmp/data
ADD app.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar --spring.profiles.active=docker" ]

编译镜像

docker build -t zengjing/pep_notifier:0.1.0 .

运行容器

docker run -d --name pep_notifier --link mysql57:mysqldb --restart=always -p 8080:8080 zengjing/pep_notifier:0.1.0

到这里一切顺利,运行过程中发现消息发送大量的报错,错误信息如下:

java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/None/NoPadding

以前通过命令行运行的时候也有类似的报错,找到了一个大神的文章(https://www.cnblogs.com/greys/p/10950525.html)修改了JDK得以解决。主要做法就是修改 java.security 文件添加扩展的加密套件。现在的问题就是如何在Docker中实现JDK的修改呢?

(1) 下载 bcprov-jdk15on-1.58.jar

curl https://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk15on/1.58/bcprov-jdk15on-1.58.jar -o bcprov-jdk15on-1.58.jar

(2) 获取 java.security 并修改配置

前面已经运行起来容器,可以通过命令拷贝容器的文件到宿主机

docker cp pep_notifier:/usr/local/openjdk-8/jre/lib/security/java.security .

对拷贝出来的文件添加如下行(搜索 security.provider 跟在后面添加,注意后面的数字是连续递增的)

security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

(3) 修改 Dockerfile

在之前的版本基础上增加两行,主要是拷贝并替换 java.security 配置内容

ADD security/java.security ${JAVA_HOME}/jre/lib/security/
ADD security/bcprov-jdk15on-1.58.jar ${JAVA_HOME}/jre/lib/ext/

做完上面的步骤再重新构建镜像,运行容器就OK了。再次运行前需要先删除之前的容器,参考如下命令:

docker stop pep_notifier # 停止容器
docker rm pep_notifier # 删除容器

参考资料

最近的文章

macOS SSH 登录账号过期问题解决

近期对构建环境的几台 Mac Mini 做了一些“标准化”处理,处理完成后发现通过ssh访问输入密码无法正常连接了(按回车会立即提示连接结束)。通过查看控制台日志发现有如下的记录:错误信息:error: PAM: user account has expired for xxxx from 127.0.0.1各种查找资料没有找到能讲清楚这个问题原因的,经过一番测试发现一种解决办法:(1) 查看是否打开共享的远程登录 旧版的系统(<= macOS 12) 新版的系统(>= m...…

Note继续阅读
更早的文章

macOS iTerm2 环境配置

近今年开始在macOS上面不再使用自带的终端(Terminal.app),开始使用 iTerm2 替代。整个安装配置比较简单,记录一下个性化的配置的步骤(主要是配置主题和字体),免得再次配置的时候又需要到处去找。下载安装到官网下载最新的安装包,下载地址:https://iterm2.com/downloads.html点链接下载完成后直接拖 iTerm.app 文件到 /Applications 即可。主题配置主题使用的是 Snazzy,直接到 https://github.com/sin...…

Note继续阅读