构建可运行OpenJDK 15及带Chromedriver的Selenium的Dockerfile的基础镜像及示例参考
可选用的基础镜像方向
- 优先选Debian/Ubuntu衍生版的Eclipse Temurin OpenJDK 15官方镜像,规避Alpine变体下Chromium适配性差、依赖排查成本高的问题
- 可复用Selenium项目官方维护的预置浏览器基础镜像分支,这类镜像已经预配置好Chromium、Chromedriver和相关运行依赖,后续只需要替换适配版本的OpenJDK 15运行时,能大幅减少依赖排查的工作量
可直接参考的Dockerfile构建示例
注意:镜像内安装的Chromium与Chromedriver版本必须严格匹配,否则会直接触发Selenium会话创建失败错误
# 基于Jammy Ubuntu版OpenJDK15基础镜像搭建 FROM eclipse-temurin:15-jdk-jammy # 关闭安装过程的交互提示,避免构建卡死 ENV DEBIAN_FRONTEND=noninteractive # 安装Chromium浏览器、匹配版本的Chromedriver以及运行所需的系统依赖 RUN apt-get update && apt-get install -y \ chromium-browser \ chromium-chromedriver \ fonts-liberation \ libnss3 \ libasound2 \ libappindicator3-1 \ xdg-utils \ # 清理安装缓存缩小镜像体积 && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 将Chromedriver路径加入全局环境变量 ENV PATH="$PATH:/usr/lib/chromium-browser/chromedriver" # 预置容器无GUI环境下的Chrome启动参数,供业务代码直接读取使用 ENV CHROME_LAUNCH_ARGS="--no-sandbox --disable-dev-shm-usage --headless=new"
构建与运行的关键注意事项
- 不要使用Alpine体系的OpenJDK15镜像搭建该类环境:Chromium在Alpine下需要额外配置大量兼容层,不仅镜像体积更大,还容易出现无明确报错的随机崩溃问题
- Debian/Ubuntu软件源内的
chromium-browser与chromium-chromedriver默认是版本强绑定的,手动从官方渠道下载二进制包时必须逐主版本核对,否则会直接触发Selenium的session not created类报错 - 容器内启动Chrome必须携带两个核心参数:
--no-sandbox解决容器非root身份运行浏览器的权限冲突,--disable-dev-shm-usage解决容器默认共享内存过小导致的浏览器崩溃问题 - 无需在镜像层面单独安装Selenium的Java依赖,这类依赖会随业务项目的可执行Jar包一同打包传入,镜像只需要保证OpenJDK运行时、浏览器、Chromedriver三者版本适配即可
- 如果需要保证构建可复现,建议在apt安装时指定对应软件版本号,避免软件源内的包自动升级导致的驱动和浏览器版本不匹配问题
内容的提问来源于stack exchange,提问作者HeronAlgoSearch
相关产品推荐
相关产品推荐

