当我有一个包含以下行的 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 表单时,如何将参数传递给我想要启动的应用程序呢?
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 本身编写的错误消息中使用)。
| 归档时间: |
|
| 查看次数: |
875 次 |
| 最近记录: |