背景
原本部署环境中的java:8镜像在检查问题删除, 用docker pull openjdk:8重新拉取并改名java:8, 在重新部署后, 发送邮件报错: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)!!!
原因
- 根本原因是jdk1.8版本SSL调用权限上有问题
参考Java调用ssl异常,javax.net.ssl.SSLHandshakeException: No appropriate protocol - 原本的java:8镜像是已经修复该问题的, 但被重置了
解决办法
修改jdk镜像中的java.security文件
- 重新拉取镜像openjdk:8
docker pull openjdk:8
- 创建临时容器temp-java8(temp-java8为容器名, 可自定义), 查找java.security位置
docker run -it --name temp-java8 openjdk:8 /bin/bash
find / -name "java.security"
exit
3.将文件复制出来修改, 再复制回去
docker cp temp-java8:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security /home/java.security
vi java.security
docker cp /home/java.security temp-java8:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security
4.用已有容器构建新的镜像
docker commit temp-java8 java:8
方法优缺点
优点
- 可以直接拿来即用
缺点
- 后续维护的人不清楚有什么改动
替换方法
直接修改Dockerfile, java.security需要放到Dockerfile同级目录
COPY java.security /usr/local/openjdk-8/jre/lib/security/java.security
优点
- 后续维护的人清楚有什么改动
缺点
- 迁移时需要移动相应的文件