如何编写适用于Jenkins流水线的含Maven、JDK、Docker的Dockerfile
错误原因说明
- 你在构建阶段执行
RUN docker ps报错,是因为Docker镜像构建过程中默认不会启动Docker daemon,你仅安装了Docker客户端,没有可连接的守护进程自然会触发该报错,这条测试命令可以直接从Dockerfile中移除。 - 你的使用场景是Jenkins流水线agent,不需要在容器内部运行Docker daemon,只要预装Docker客户端,运行容器时挂载宿主机的
/var/run/docker.sock文件,就能复用宿主机的Docker daemon完成镜像构建操作,比DinD(Docker in Docker)方案更简单稳定。
正确的Dockerfile编写
# 基础镜像已预装Maven 3.8.1和OpenJDK 11,匹配你的需求 FROM maven:3.8.1-adoptopenjdk-11 # 合并命令减少镜像层数,更新源、安装依赖、安装Docker客户端并清理缓存减小镜像体积 RUN apt update -y && \ apt install -y curl && \ curl -fsSL https://get.docker.com/builds/Linux/x86_64/docker-latest.tgz | tar xvz -C /tmp/ && \ mv /tmp/docker/docker /usr/bin/docker && \ apt clean && \ rm -rf /var/lib/apt/lists/* /tmp/docker
构建与使用验证
- 构建镜像命令:
docker build -t maven-jdk11-docker . - 本地可用性验证:
执行docker run --rm -v /var/run/docker.sock:/var/run/docker.sock maven-jdk11-docker docker ps,如果能正常输出宿主机正在运行的容器列表,说明镜像功能正常。如果遇到权限报错,可以指定以root用户运行容器,或者给宿主机的/var/run/docker.sock文件添加其他用户读写权限。 - Jenkins流水线使用配置:
定义agent时添加卷挂载配置,将宿主机的/var/run/docker.sock挂载到容器的同路径,即可正常执行mvn spring-boot:build-image命令完成Spring Boot镜像构建。
内容的提问来源于stack exchange,提问作者Andy Dufresne
相关产品推荐
相关产品推荐

