docker runでCMDとして与えた引数のスペースが正しく処理されない
以下の様なDockerfileとdocker-entrypoint.shを作成してビルドしました。
Dockerfile
FROM debian:latest
COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
docker-entrypoint.sh
#!/bin/sh
echo '$@ = '$@
echo '$# = '$#
OPT=`getopt -o "" -l "hoge:,huga:" -- "$@"`
echo '$OPT = '$OPT
やりたいこととしては、
docker run myimage --hoge="ho ge" --huga="hu ga"
のようにオプションを指定できるようにし、entrypoint.shで処理できるようにしたいのです。
理想ではgetopt
でオプションが整形され--hoge 'ho ge' --huga 'hu ga'
のような出力がされるはずなのですが、結果は
$@ = --hoge=ho ge --huga=hu ga
$# = 4
$OPT = --hoge 'ho' --huga 'hu' -- 'ge' 'ga'
となり、docker run
した時点でクォーテーション内の文字列がスペースで分断されている(?)ようなのです。
理想通りにentrypoint.sh内のgetopt
でスペース入りの文字列を適切に処理させるにはどうしたら良いでしょうか? 簡単のためdocker run
時のオプション指定方法は変えたくないです。
ちなみに、docker run -it --entrypoint=sh
でコンテナ内から/entrypoint.sh --hoge="ho ge" --huga="hu ga"
を実行すると
$@ = --hoge=ho ge --huga=hu ga
$# = 2
$OPT = --hoge 'ho ge' --huga 'hu ga' --
となり理想通りに動いてくれます。
Windows 10 / Docker 1.10.0 (build 590d5108) / docker-machine 0.6.0 (build e27fb87)