avl*_*oss 2 ipython docker jupyter
当指定命令时,CMD a b c一切都按预期工作,同时用CMD ["a", "b", "c"]- 指定相同的命令- 它会产生意外的结果.我正试图在docker中运行Jupyter(ipython).我的CMD命令是启动它.似乎无论我指定它的方式 - Jupyter开始.但是,只有当我指定它为CMD a b cjupyter实际上正常工作并且可以启动内核.在这种情况下,"New Notebook"命令有效
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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"新笔记本"命令不起作用
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
Run Code Online (Sandbox Code Playgroud)
我真的很困惑,想不出有什么区别!
所述壳形式(CMD a b c)调用壳与被解析,而字符串EXEC形式(CMD [a, b, c])直接用指定的参数启动可执行文件.
由于在exec形式中没有shell解析(在这种情况下,删除了shell形式中的空引号),最后一个参数应该是,例如"--NotebookApp.token=".这是在--NotebookApp.token=没有两个撇号的情况下给予程序的.
从手册:
与shell表单不同,exec表单不会调用命令shell.这意味着不会发生正常的shell处理.例如,CMD ["echo","$ HOME"]不会对$ HOME进行变量替换.如果你想要shell处理,那么要么使用shell表单,要么直接执行shell,例如:CMD ["sh"," - c","echo $ HOME"].当使用exec表单并直接执行shell时(如shell表单的情况),它是执行环境变量扩展的shell,而不是docker.
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |