jib-maven-plugin是首选方案,无需本地Docker环境和Dockerfile,通过Maven配置即可快速构建并推送镜像到本地或远程仓库,适合CI/CD场景。

推荐首选:jib-maven-plugin(免 Docker 环境)
它不依赖本地 Docker daemon,也不需要写 Dockerfile,所有镜像层逻辑由 Jib 在 JVM 内完成,构建快、可重现性强,特别适合 CI/CD 流水线。
- 在 pom.xml 的
<plugins>中添加:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<from><image>eclipse/jetty:11-jre17-slim</image></from>
<to>
<image>localhost:5000/myapp</image>
<tags><tag>${project.version}</tag></tags>
</to>
<container>
<ports><port>8080</port></ports>
<jvmFlags><jvmFlag>-Xms256m</jvmFlag></jvmFlags>
</container>
</configuration>
</plugin>
- 推送前确保私有 registry 已运行(如
docker run -d -p 5000:5000 --name registry registry:2) - 执行命令:
mvn compile jib:build—— 自动构建并推送到localhost:5000/myapp - 若需认证,把用户名密码加到
~/.m2/settings.xml的<servers>段,serverId要和插件配置中一致
灵活可控:dockerfile-maven-plugin(需本地 Docker)
适合需要完全掌控镜像结构、挂载卷、多阶段构建或集成证书等文件的场景。必须本地安装 Docker,并确保 daemon 正常运行。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 在项目根目录放一个 Dockerfile(与 pom.xml 同级):
FROM openjdk:17-jre-slim
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- pom.xml 中配置插件:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<configuration>
<repository>localhost:5000/myapp</repository>
<tag>${project.version}</tag>
<buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs>
</configuration>
</plugin>
- 执行:
mvn clean package dockerfile:build -DpushImage—— 先打包 JAR,再构建并推送 - Windows 用户注意:Docker Desktop 需开启 WSL2 或 Hyper-V,且勾选 “Expose daemon on tcp://localhost:2375 without TLS”
Spring Boot 原生支持(零配置,但限制多)
Spring Boot 2.3+ 内置了 spring-boot:build-image 目标,底层调用 Paketo builder,无需额外插件,但对基础镜像和构建环境有强依赖。
- 确保 pom.xml 继承
spring-boot-starter-parent,且已配置spring-boot-maven-plugin - 执行:
mvn spring-boot:build-image -Dspring-boot.build-image.imageName=localhost:5000/myapp:${project.version} - 默认使用
gcr.io/paketo-buildpacks/bellsoft-liberica,若网络受限,可通过-Dspring-boot.build-image.builder指定国内镜像源 - 不支持自定义 ENTRYPOINT 或 COPY 外部文件(如 .pem 证书),复杂场景仍需前两种方式

















