带参数的 Docker ENTRYPOINT shell 形式

wuj*_*jek 2 docker dockerfile

当我有一个包含以下行的 Docker 映像(Spring Boot 微服务)时:

ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
Run Code Online (Sandbox Code Playgroud)

我可以使用例如启动容器:

docker run --rm my_image:1.0.0 --spring.profiles.active=local
Run Code Online (Sandbox Code Playgroud)

--spring.profiles.active=local并且它有效,使用了该参数。但是,当使用 ENTRYPOINT 的 shell 形式时:

ENTRYPOINT java org.springframework.boot.loader.JarLauncher
Run Code Online (Sandbox Code Playgroud)

这不再起作用,参数被忽略。我相信参数被传递给/bin/sh -cshell 表单所使用的参数。

那么,在使用 shell 表单时,如何将参数传递给我想要启动的应用程序呢?

Cha*_*ffy 5

ENTRYPOINT string_here
Run Code Online (Sandbox Code Playgroud)

...Docker 已运行:

ENTRYPOINT string_here
Run Code Online (Sandbox Code Playgroud)

这样做的问题是,当您添加更多参数时,它们会作为新元素添加到参数向量上,如下所示:

["sh", "-c", "string_here"]
Run Code Online (Sandbox Code Playgroud)

这意味着它们被忽略,因为string_here当作为脚本调用时,不会查看它给出的进一步参数。

因此,您可以使用:

ENTRYPOINT string_here "$0" "$@"
Run Code Online (Sandbox Code Playgroud)

其中"$@"in shell 扩展为"$1" "$2" "$3" ..., 并且$0是后面的第一个参数-c(通常是脚本或可执行文件的名称,并在 shell 本身编写的错误消息中使用)。