2017-02-20 8 views
2

CMD a b cと指定した場合、同じコマンドをCMD ["a", "b", "c"]と指定してもすべて正常に動作します。 私はドッカー内でJupyter(ipython)を実行しようとしています。私のCMDコマンドはそれを開始することです。私が指定した方法にかかわらず、Jupyterが始まります。しかし、私がCMD a b cと指定した場合にのみ、実際に正しく動作し、カーネルを起動することができます。コマンドは「新しいノート」コマンドがDocker `CMD a b c` VS` CMD ["a"、 "b"、 "c"] `

FROM debian:stable 
    RUN apt-get update && apt-get install -y wget bzip2 
    RUN wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh && \ 
     bash Miniconda2-latest-Linux-x86_64.sh -b -p /anaconda2 
    RUN /anaconda2/bin/conda install jupyter 

    CMD ["/anaconda2/bin/jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--NotebookApp.token=''"] 
    #CMD /anaconda2/bin/jupyter notebook --port=8888 --no-browser --ip=0.0.0.0 --NotebookApp.token='' 

    # docker build -t IMAGE_NAME . 
    # docker run --rm -it -p 8888:8888 IMAGE_NAME 

を動作しません。この場合

FROM debian:stable 
    RUN apt-get update && apt-get install -y wget bzip2 
    RUN wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh && \ 
     bash Miniconda2-latest-Linux-x86_64.sh -b -p /anaconda2 
    RUN /anaconda2/bin/conda install jupyter 

    #CMD ["/anaconda2/bin/jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--NotebookApp.token=''"] 
    CMD /anaconda2/bin/jupyter notebook --port=8888 --no-browser --ip=0.0.0.0 --NotebookApp.token='' 

    # docker build -t IMAGE_NAME . 
    # docker run --rm -it -p 8888:8888 IMAGE_NAME 

に動作します私は本当にこれで困惑しています。この場合、「新規ノート」で は、どのような可能性を考えることはできません違いがあります! shell formCMD a b c

答えて

5

EXECフォーム(CMD [a, b, c])が指定された引数で直接実行可能ファイルを起動する一方、解析された文字列でシェルを呼び出します。

ないシェル解析(この場合には、シェル形態で空の引用符を除去し、)EXEC形態で存在しないように、最後のパラメータは、例えば、でなければならない。、"--NotebookApp.token="。これは、プログラムに--NotebookApp.token=として与えられ、2つのアポストロフィは含まれません。マニュアルから


:シェル形式とは異なり

、幹部の形式は、コマンドシェルを起動しません。つまり、通常のシェル処理は行われません。たとえば、CMD ["echo"、 "$ HOME"]は$ HOMEで変数置換を行いません。シェル処理を行う場合は、シェルフォームを使用するか、シェルを直接実行します(CMD ["sh"、 "-c"、 "echo $ HOME"])。シェルフォームの場合のように、execフォームを使用して直接シェルを実行するときは、環境変数拡張を行っているシェルがドッキングステーションではなくシェルです。

+0

tbh、私はそのような疑いがありました。私は 'CMD [" bash "、" a "、" b "、" c "]'を試したこともありますが、明らかに 'CMD [bash"、 "abc"] ' – avloss

+1

@ avloss' CMD ["bash"、 "-c"、 "abc"] ' – Matt

+0

ありがとう!まあ、実際には '' CMD ["bash"、 "-c"、 "a b c"] 'は動作しませんでした!しかし、 'CMD [" sh "、" -c "、" a b c "]'はやった!だから、 'ジュピター'はいくつかの 'env'ヴァルスに依存しており、' bash'には存在しません。 – avloss

関連する問題