关于docker入口点的困惑

关于docker入口点的困惑,docker,Docker,我是码头工人的新手,所以请容忍我。我已经编写了一个Dockerfile,它使用Java语言Spring引导服务在其中创建了一个映像。我现在正在尝试设置一个入口点来启动容器中的服务。我选择编写一个外部shell脚本作为入口点 这就是服务的设置方式 构建项目时,将生成一个zip文件,其中包含服务jar、所有依赖项jar、配置资源和用于启动服务的bash脚本。该脚本接受许多参数,验证它们,并使用它们构造并执行“java”命令来运行服务 如果要以“非容器方式”运行此脚本,只需将zip文件解压缩到某个目录

我是码头工人的新手,所以请容忍我。我已经编写了一个Dockerfile,它使用Java语言Spring引导服务在其中创建了一个映像。我现在正在尝试设置一个入口点来启动容器中的服务。我选择编写一个外部shell脚本作为入口点

这就是服务的设置方式

构建项目时,将生成一个zip文件,其中包含服务jar、所有依赖项jar、配置资源和用于启动服务的bash脚本。该脚本接受许多参数,验证它们,并使用它们构造并执行“java”命令来运行服务

如果要以“非容器方式”运行此脚本,只需将zip文件解压缩到某个目录中,然后调用脚本,并传递必要的参数。如果所需参数不存在,脚本将显示“用法”信息

在Docker容器的例子中,我试图从Dockerfile的入口点了解如何做同样的事情。我在ENTRYPOINT中指定了我的启动程序脚本,它确实调用了它,当然,没有传递任何参数,因此脚本会带着使用信息退出

我不知道如何传递启动器脚本期望的参数

我得到的印象是,我在使用ENTRYPOINT时遗漏了一个重要的细节

下面是相关文件的片段,试图说明我的情况

Dockerfile

...
# Copy Route Assesssor service archive and unpack.
COPY target/route-assessor.zip .
RUN unzip route-assessor.zip

WORKDIR route-assessor
ENTRYPOINT ["run-route-assessor.sh"]
运行路线评估器。sh

...
# Copy Route Assesssor service archive and unpack.
COPY target/route-assessor.zip .
RUN unzip route-assessor.zip

WORKDIR route-assessor
ENTRYPOINT ["run-route-assessor.sh"]
我将展示usage语句,而不是包含一个相当长的脚本,以了解该脚本对参数的期望

show_usage() {
  echo "Usage: `basename "$0"` <args>"
  echo "  --port=<service port>"
  echo "  --instance=<service instance> [optional, default: 1]"
  echo "  --uuid=<service UUID>"
  echo "  --ssl [optional]"
  echo "  --keystore=<key store path> [required when --ssl specified]"
  echo "  --key-alias=<key alias> [required when --ssl specified]"
  echo "  --apm-host=<Elastic APM server host> [optional]"
  echo "  --apm-port=<Elastic APM server port> [optional]"
}
容器启动尝试的示例:

[jo24447@489337-mitll route-assessor]$ docker start -ai route-assessor-1
Service port is required.
Usage: run-route-assessor.sh <args>
  --port=<service port>
  --instance=<service instance> [optional, default: 1]
  --uuid=<service UUID>
  --ssl [optional]
  --keystore=<key store path> [required when --ssl specified]
  --key-alias=<key alias> [required when --ssl specified]
  --apm-host=<Elastic APM server host> [optional]
  --apm-port=<Elastic APM server port> [optional]

[jo24447@489337-mitll route-assessor]$ docker start -ai route-assessor-1 --port=9100
unknown flag: --port
See 'docker start --help'.
[jo24447@489337-mitll路线评估员]$docker start-ai路线评估员-1
服务端口是必需的。
用法:run-route-assessor.sh
--港口=
--实例=[可选,默认值:1]
--uuid=
--ssl[可选]
--密钥库=[指定--ssl时需要]
--密钥别名=[指定--ssl时需要]
--apm主机=[可选]
--apm端口=[可选]
[jo24447@489337-mitll路线评估器]$docker start-ai路线评估器-1--端口=9100
未知标志:-端口
请参阅“docker启动--帮助”。

如果要使用一些默认参数运行容器,则需要在
CMD
中定义这些参数:

ENTRYPOINT [ "./run-route-assessor.sh" ]
CMD ["-cmd1 value1 -cmd2 value2"]
因此,您可以使用以下工具运行容器:

docker运行映像名称

如果要覆盖没有参数的默认参数列表,可以使用:

docker运行映像名称““””

然而,更好的方法是将一个标志传递给
/runrouteassessor.sh
,并让脚本处理如何在没有参数的情况下运行Spring引导服务

docker运行映像名称-无参数


如果要使用一些默认参数运行容器,则需要在
CMD
中定义这些参数:

ENTRYPOINT [ "./run-route-assessor.sh" ]
CMD ["-cmd1 value1 -cmd2 value2"]
因此,您可以使用以下工具运行容器:

docker运行映像名称

如果要覆盖没有参数的默认参数列表,可以使用:

docker运行映像名称““””

然而,更好的方法是将一个标志传递给
/runrouteassessor.sh
,并让脚本处理如何在没有参数的情况下运行Spring引导服务

docker运行映像名称-无参数


这个问题不应该没有答案。