在 Dockerfile 里你有两种官方指令来声明“容器启动时到底执行哪条 Java 命令”:
- ENTRYPOINT —— 定义主可执行文件 / 脚本
- CMD —— 为 ENTRYPOINT 提供默认参数,或单独充当默认命令
只要把 java …
写在这两条指令中,镜像启动(docker run
、Compose、K8s 等)时就会自动执行该 Java 应用,无需再手动在 docker run
后面拼命令。
──────────────────────────────
一、最常见写法
──────────────────────────────
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY target/myservice.jar myservice.jar
# Java 命令 + 参数全部放在 ENTRYPOINT
ENTRYPOINT ["java", "-jar", "/app/myservice.jar"]
说明
• 采用 exec 形式(JSON 数组),可避免 /bin/sh -c
额外进程;
• 想在运行时追加参数,例如 --port=8081
,可在 docker run
后面写:
docker run image:tag --port=8081