You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker ENTRYPOINT shell形式时,如何为Spring Boot应用传递参数?

Docker Shell形式ENTRYPOINT传递参数到Spring Boot应用

当Docker镜像使用exec形式的ENTRYPOINT配置Spring Boot微服务时:

ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

执行docker run --rm my_image:1.0.0 --spring.profiles.active=local启动容器,--spring.profiles.active=local参数能正常被应用接收。

但改用shell形式的ENTRYPOINT配置时:

ENTRYPOINT java org.springframework.boot.loader.JarLauncher

上述启动参数会被忽略——原因确实如你推测,shell形式的ENTRYPOINT默认通过/bin/sh -c执行命令,传递的参数会被交给shell进程而非目标应用。

以下是几种解决方法:

  • 推荐:改用exec形式ENTRYPOINT
    这是Docker官方推荐的最佳实践,不仅能让Spring Boot应用成为容器的PID 1进程(保证信号能正确传递),还能直接接收docker run命令追加的参数:
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

启动命令保持不变即可。

  • 保留shell形式,显式传递参数
    如果因特殊需求必须使用shell形式,可在ENTRYPOINT中用$@捕获所有命令行参数,同时用exec让应用接管PID 1:
ENTRYPOINT exec java org.springframework.boot.loader.JarLauncher "$@"

此时执行docker run --rm my_image:1.0.0 --spring.profiles.active=local,$@会被替换为传递的参数,最终传递给Spring Boot应用。

  • 结合ENTRYPOINT与CMD定义默认参数
    也可以用shell形式ENTRYPOINT配合CMD设置默认启动参数,同时允许通过docker run命令覆盖:
ENTRYPOINT exec java org.springframework.boot.loader.JarLauncher
CMD []

启动时追加的参数会自动作为CMD的内容,传递给ENTRYPOINT中的应用命令。

内容的提问来源于stack exchange,提问作者wujek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:01:42