Debian镜像安装Java 11时无法读取/etc/ssl/certs/java/cacerts的问题
解决Debian镜像构建Selenium时JDK11证书文件缺失问题
嘿,我知道你在构建基于Debian的Selenium Docker镜像时碰到了head: cannot open '/etc/ssl/certs/java/cacerts' for reading: No such file or directory的错误,这其实是证书配置顺序或者脚本执行的小问题,我给你捋清楚怎么修复:
问题根源
你安装openjdk-11-jre-headless之后,ca-certificates-java包需要生成/etc/ssl/certs/java/cacerts这个证书文件,但要么是安装顺序不对,要么是Debian自带的证书配置脚本没正确触发,导致这个关键文件没生成,自然就报错了。
具体修复方案
1. 调整安装顺序+强制更新证书
最靠谱的办法是把证书包安装放在JRE之后,并且手动触发证书更新。修改你的Dockerfile步骤如下:
RUN apt-get upgrade -y RUN apt-get update -y RUN apt-get -y install apt-transport-https curl RUN apt-get -qqy --no-install-recommends install bzip2 ca-certificates RUN mkdir -p /usr/share/man/man1 # 先装JRE,确保基础环境到位 RUN apt-get -qqy --no-install-recommends install openjdk-11-jre-headless # 安装证书包,并强制更新生成cacerts文件 RUN apt-get -qqy --no-install-recommends install ca-certificates-java && update-ca-certificates -f # 后面的步骤保持原样即可 RUN dpkg --list | grep java RUN apt-get -qqy --no-install-recommends install sudo unzip gdebi-core COPY files/chrome/google-chrome_amd64.deb /google-chrome_amd64.deb RUN gdebi --n /google-chrome_amd64.deb RUN apt-get -qqy install xvfb RUN rm -rf /var/lib/apt/lists/* /var/cache/apt/* RUN echo $(ls ./usr/lib/jvm/java-11-openjdk-amd64/lib/security)
2. 手动创建软链接(备选)
如果上面的方法还是没解决,那就直接手动把JRE自带的证书文件链接到系统指定路径,毕竟JRE本身就有这个文件:
# 在安装完JRE和证书包之后添加这条命令 RUN ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/security/cacerts /etc/ssl/certs/java/cacerts
额外的镜像优化小技巧
- 把多个
RUN命令合并成一条,能减少Docker镜像的层数,让构建更高效,比如把零散的apt-get install合并:
RUN apt-get -qqy --no-install-recommends install bzip2 ca-certificates openjdk-11-jre-headless ca-certificates-java sudo unzip gdebi-core xvfb && update-ca-certificates -f
- 记得给
apt-get upgrade和apt-get update加上-y参数,避免构建过程中卡在交互等待的环节。
内容的提问来源于stack exchange,提问作者Pavithra Raghavendran
相关产品推荐
相关产品推荐

