以下の様な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)