我習慣ENTRYPOINT在運行時傳入一個引數,docker run但我無法將運行時引數作為引數顯示在我的腳本中。
Dockerfile
FROM debian:latest
ENV a="my arg in Dockerfile"
COPY . .
RUN chmod x myscript.sh
ENTRYPOINT ["/bin/bash", "-c", "/myscript.sh ${a}"]
使用myscript.sh
#!/bin/bash
echo "From script: $@"
當我運行時docker build -t my_image .,docker run -it --rm my_image我得到了預期的結果:From script: my arg in Dockerfile
但是當我運行時,docker run -it --rm my_image from_run我得到了相同的結果:From script: my arg in Dockerfile所以“from_run”沒有通過ENTRYPOINT.
我讀到在影像名稱附加到之后傳遞的引數,ENTRYPOINT但顯然我在這里不理解某些東西。
使用 exec 形式而不是 JSON 形式時的結果相同:
ENTRYPOINT /myscript.sh ${a}
https://docs.docker.com/engine/reference/run/#entrypoint-default-command-to-execute-at-runtime
uj5u.com熱心網友回復:
主容器命令由兩部分組成。您在docker run image-name替換 Dockerfile之后傳遞的字串CMD,并將其附加到 Dockerfile ENTRYPOINT。
為了使您的docker run命令正常作業,您需要提供要運行的命令ENTRYPOINT及其引數為CMD. 您在這里不需要環境變數。但是,重要的是這兩個部分都使用 JSON 陣列語法并且都不呼叫 shell。如果ENTRYPOINT包含一個外殼,那么事情在語法上會變得復雜(參見@KamilCuk 的回答);如果CMD包含一個外殼,那么它不會被呼叫,但該命令將被呼叫,/bin/sh并且-c作為引數。
FROM debian:latest
COPY myscript.sh /usr/local/bin/myscript # preserves execute permissions
ENTRYPOINT ["myscript"] # in a $PATH directory
CMD ["my", "arg", "in", "Dockerfile"]
docker run --rm the-image
docker run --rm the-image my arg from command line
如果您希望包含初始命令列引數集并docker run附加引數,您可以將它們移動到該ENTRYPOINT行中;請注意,docker run --entrypoint如果您確實決定需要洗掉某些選項,則在語法上很尷尬。
ENTRYPOINT ["myscript", "--first-default", "--second-default"]
# CMD []
docker run --rm the-image
docker run --rm the-image --user-option
docker run --entrypoint myscript the-image --first-default --no-second-default
如果您可以更新您的應用程式以接受選項作為環境變數以及命令列設定,這會使所有這些在語法上更容易。
ENV FIRST_DEFAULT=yes
ENV SECOND_DEFAULT=yes
CMD ["myscript"]
docker run --rm the-image
docker run --rm -e USER_OPTION=yes the-image
docker run --rm -e SECOND_DEFAULT=no the-image
uj5u.com熱心網友回復:
Bash 是 Bash,請參閱 bash 手冊如何-c傳遞引數。以下:
/bin/bash -c "/myscript.sh ${a}" from_run
只將一個引數傳遞給 myscript.sh 并且是 unquoted $a,因此$a會進行分詞和檔案名擴展。并且引數from_run被分配給$0. 我會做:
ENTRYPOINT ["/bin/bash", "-c", "./myscript.sh \"$a\" \"$@\"", "--"]
請注意,環境變數通常使用大寫(和唯一名稱)$a。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/510493.html
