22263


以下の様なDockerfileとdocker-entrypoint.shを作成してビルドしました。

### Dockerfile

[code]

    FROM debian:latest
    COPY docker-entrypoint.sh /entrypoint.sh
    ENTRYPOINT ["/entrypoint.sh"]
    
[/code]

### docker-entrypoint.sh

[code]

    #!/bin/sh
    echo '$@ = '$@
    echo '$# = '$#
    OPT=`getopt -o "" -l "hoge:,huga:" -- "$@"`
    echo '$OPT = '$OPT
    
[/code]

やりたいこととしては、

[code]

    docker run myimage --hoge="ho ge" --huga="hu ga"
    
[/code]

のようにオプションを指定できるようにし、entrypoint.shで処理できるようにしたいのです。

理想では`getopt`でオプションが整形され`--hoge 'ho ge' --huga 'hu ga'`のような出力がされるはずなのですが、結果は

[code]

    $@ = --hoge=ho ge --huga=hu ga
    $# = 4
    $OPT =  --hoge 'ho' --huga 'hu' -- 'ge' 'ga'
    
[/code]

となり、`docker run`した時点でクォーテーション内の文字列がスペースで分断されている（？）ようなのです。  
理想通りにentrypoint.sh内の`getopt`でスペース入りの文字列を適切に処理させるにはどうしたら良いでしょうか？ 簡単のため`docker
run`時のオプション指定方法は変えたくないです。

ちなみに、`docker run -it --entrypoint=sh`でコンテナ内から`/entrypoint.sh --hoge="ho ge"
--huga="hu ga"`を実行すると

[code]

    $@ = --hoge=ho ge --huga=hu ga
    $# = 2
    $OPT =  --hoge 'ho ge' --huga 'hu ga' --
    
[/code]

となり理想通りに動いてくれます。

* * *

Windows 10 / Docker 1.10.0 (build 590d5108) / docker-machine 0.6.0 (build
e27fb87)


CC BY-SA 3.0
2016-02-18T22:50:32.197
22250
2016-02-23T02:29:03.043
2016-02-19T08:07:58.560
2988
2988
question
shellscript sh docker
docker runでCMDとして与えた引数のスペースが正しく処理されない


Windows版Docker
Toolboxのバグだったようです。（[参考](https://github.com/docker/toolbox/issues/368)）  
1.10.2へのアップデートで修正されました。


CC BY-SA 3.0
2016-02-19T08:39:23.457
22263
2016-02-23T02:29:03.043
2016-02-23T02:29:03.043
2988
2988
22250
answer