【发布时间】:2020-01-28 19:02:01
【问题描述】:
我是 Docker 新手,请耐心等待。我编写了一个 Dockerfile,它在其中创建了一个带有 Java 语言 Spring Boot 服务的图像。我现在正在尝试设置一个入口点来启动容器中的服务。我选择编写一个外部 shell 脚本作为入口点调用。
这就是服务的设置方式。
构建项目时,会生成一个 zip 文件,其中包含服务 jar、所有依赖项 jar、配置资源和用于启动服务的 bash 脚本。该脚本接受许多参数,对其进行验证并使用它们来构造,然后执行“java”命令来运行服务。
如果您要以“非容器方式”运行它,您只需将 zip 文件解压缩到某个目录中并调用脚本,并传递必要的参数。如果所需的参数不存在,脚本会显示“使用”信息。
在 Docker 容器案例中,我试图从 Dockerfile 中的 ENTRYPOINT 找出如何做同样的事情。我在 ENTRYPOINT 中指定了我的启动器脚本,它确实调用了它,尽管当然没有传递任何参数,所以脚本退出并带有使用信息。
我不知道如何传递启动器脚本期望的参数。
我觉得我在使用 ENTRYPOINT 时遗漏了一个重要细节。
以下是相关文件的sn-ps,以说明我的情况。
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"]
run-route-assessor.sh:
我不会包含一个相当冗长的脚本,而是展示用法说明以了解该脚本期望的参数。
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 create --name route-assessor-1 route-assessor
容器启动尝试示例:
[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'.
【问题讨论】:
-
这个问题不应该没有minimal reproducible example。
标签: docker