簡體   English   中英

Docker CMD + ENTRYPOINT與命令行行為不匹配

[英]Docker CMD + ENTRYPOINT not matching command line behavior

我正在嘗試基於一個發行版的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外殼。 然后,我在命令行上輸入了以下內容:

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/*"

在您當前的Dockerfile-cp選項的參數是文字值'/usr/vertx/lib/*' ,包括單引號。 當然,這與任何文件系統路徑都不匹配。

最終解決方案是使用以下Dockerfile:

FROM gcr.io/distroless/java
ADD vert.x-3.7.0.tar.gz /usr/

ENTRYPOINT ["java","-cp", "/usr/vertx/lib/*", "io.vertx.core.Launcher", "version"]

我刪除:debug只是因為busybox shell僅用於調試。 它沒有影響解決方案。

最終大小為222MB,低於大約474MB! 我必須進行一些測試,以查看圖像的功能是否完整,但是到目前為止,我希望它可以用作縮小的vertx圖像。

Distroless圖片的工作方式略有不同。 他們希望您的CMD具有[“ yourfile.jar”,“ --param1 = val1”,...]的形式。 注意沒有“ java”

您可以在非發行版Java映像的構建文件中找到此信息: https : //github.com/GoogleContainerTools/distroless/blob/master/java/BUILD#L28

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM