java - Docker CMD + ENTRYPOINT 与命令行行为不匹配
问题描述
我正在尝试基于 distroless java 映像构建一个 vertx docker 环境。当我运行 docker 容器时,它找不到我要执行的类。
但是,当我在容器中运行命令时,它工作得很好。
这是我的 Dockerfile
FROM gcr.io/distroless/java:debug
ADD vert.x-3.7.0.tar.gz /usr/
ENTRYPOINT ["java","-cp", "'/usr/vertx/lib/*'", "io.vertx.core.Launcher", "version"]
CMD ["-start"]
当我运行容器时,我收到以下错误:
Error: Could not find or load main class io.vertx.core.Launcher
所以我使用以下命令运行图像:
docker run --entrypoint=sh -ti <image_name>
这给出了一个busybox shell。然后我在命令行输入以下内容:
java -cp '/usr/vertx/lib/*' io.vertx.core.Launcher version
它工作得很好,给了我以下输出
Apr 07, 2019 7:20:18 PM io.vertx.core.impl.launcher.commands.VersionCommand
INFO: 3.7.0
我期望 ENTRYPOINT + CMD 组合具有相同的行为。我似乎无法弄清楚为什么该组合不起作用。
解决方案
您的Dockerfile
. 你有:
ENTRYPOINT ["java","-cp", "'/usr/vertx/lib/*'", "io.vertx.core.Launcher", "version"]
第三个参数中的引号太多。你有:
"'/usr/vertx/lib/*'"
你要:
"/usr/vertx/lib/*"
在您的 currentDockerfile
中,选项的参数-cp
是文字值'/usr/vertx/lib/*'
,包括单引号。这当然不匹配任何文件系统路径。
推荐阅读
- blazor - 使用 Blazor 的简单可扩展表
- android - Android localNotifications 是否需要特定权限?
- python - 有没有办法将我的数据框中的 timedelta 数据转换为函数整数?
- java - Kotlin 与列表末尾的新项目关联
- elixir - 更新 Oban Job 的 schedule_at 时间
- amazon-web-services - Terraform:获取与每个子网关联的 ID
- r - 在绘图图中隐藏范围滑块()中的文本
- matrix - 创建所有非零元素设置为一的新矩阵(朱莉娅)
- angular - 从下拉列表中选择其他值后,mat-select mat-option 角度下拉列表不会更改值
- vue.js - 如何知道 vue.js 中的焦点是哪个输入?