考慮以下命令:
ls [OPTION]... [FILE]...
選項首先出現,然后是檔案。但是,不知何故,我不知道為什么,ls不堅持這個命令。因此ls -la /home并ls /home -la產生相同的輸出。
我們可以使用這個怪癖將選項發送給ls知道其[FILE]引數的人。
FROM ubuntu:22.04
ENTRYPOINT ["ls", "/home"]
然后傳遞引數與傳遞選項相同:
$ docker build -t test .
$ docker run test
$ docker run test -la
total 8
drwxr-xr-x 2 root root 4096 Apr 18 10:28 .
drwxr-xr-x 1 root root 4096 May 12 16:58 ..
然而,一些程式堅持選項和引數的順序。例如.jar帶有 Spring 服務器應用程式:
這按預期作業:
java -jar -Dspring.profiles.active=ci backend.jar
這不會:
java -jar backend.jar -Dspring.profiles.active=ci
和in似乎附加到入口點而[COMMAND]不是插入。[ARG...]docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
有沒有辦法將選項而不是引數傳遞給 docker ENTRYPOINT?
uj5u.com熱心網友回復:
您使用 as 的所有內容CMD,可能來自 Dockerfile 或在運行映像時,都將傳遞給ENTRYPOINTas 引數。
您可以創建一個更復雜的入口點,最好通過腳本。
#!/usr/bin/env sh
exec java -jar $@ backend.jar
我正在使用$@哪些是傳遞給腳本的所有引數,實際上是CMD.
此外,我正在使用行程 ID (pid) 1 運行exec最終java命令,以便它正確接收信號。例如SIGTERM.
uj5u.com熱心網友回復:
假設您想保留該java -jar backend.jar部分,您可以添加一個小 shell 腳本,該腳本接受您放在最后的引數并在之前傳遞它們。有關如何執行此操作的詳細資訊,請參閱此處選擇的答案
uj5u.com熱心網友回復:
你可以用CMD這個。
ENTRYPOINT ["java"]
CMD ["-jar", "-Dspring.profiles.active=ci", "backend.jar"]
這也允許您在運行時更改引數。例如
docker run <image> -jar -Dspring.profiles.active=debug backend.jar
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/473644.html
標籤:码头工人
下一篇:Docker退出代碼0問題
