2017-08-16 8 views
0

には、以下のDockerfileを考慮していない限り:

I

場合、ドッカー1.12.6(それが重要な場合にはUbuntuのピリッとホスト上)を使用して
FROM ubuntu:xenial-20170802 
RUN (echo '#!/bin/bash'; echo 'echo "args: [email protected]"') > /run.sh && chmod a+x /run.sh 
ENTRYPOINT /run.sh 

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

私はちょうど[email protected]が動作していない、つまり

args: 

を取得します。しかし、これはシェルスクリプト自体は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 

作品です。元のコマンドと比較すると、同じ値の--entrypointENTRYPOINTディレクティブを上書きするだけです。では、なぜそれが機能するのでしょうか?

docsには、argvが空白になる可能性があります(おそらく#!の実行可能スクリプトが含まれている)。

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

答えて

0

https://serverfault.com/a/647790/144361

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

対は、私を指摘:シェルスクリプトに

cat /proc/$$/cmdline 

を追加

は、引数が--entrypointが使用されていない限り渡されていないことを確認します正しい方向。 These docs "シェルフォーム"は引数を受け入れないことに明確に注意してください。次の構文が有効です。