2017-08-16 52 views
0

考慮以下Dockerfile

FROM ubuntu:xenial-20170802 
RUN (echo '#!/bin/bash'; echo 'echo "args: [email protected]"') > /run.sh && chmod a+x /run.sh 
ENTRYPOINT /run.sh 

使用泊塢1.12.6(Ubuntu的燦爛主機上,如果它的事項),如果我

docker build -t entrypoint-test . 
docker run --rm entrypoint-test a b c 

我只是得到

args: 

換句話說,[email protected]不工作。然而,這似乎表明,shell腳本本身是OK:

docker run --rm --entrypoint /bin/bash entrypoint-test /run.sh a b c 

生產

args: a b c 

預期。更奇怪的是,

docker run --rm --entrypoint /run.sh entrypoint-test a b c 

的作品。請注意,與原始命令相比,我沒有做任何事情,只是將ENTRYPOINT指令覆蓋的值爲--entrypoint。那麼爲什麼這會使它工作?

我看不到docs中的任何內容,這些內容會暗示argv在某些情況下會爲空,可能涉及#!可執行腳本。

添加

cat /proc/$$/cmdline 

的shell腳本確認參數沒有被傳承下去,除非--entrypoint用於:

/bin/bash^@/run.sh^@a^@b^@c^@ 

/bin/bash^@/run.sh^@ 

回答