【发布时间】:2020-03-18 17:10:53
【问题描述】:
我在 Docker 容器中运行 Jupyter。以下 shell 形式可以正常运行:
CMD jupyter lab --ip='0.0.0.0' --port=8888 --no-browser --allow-root /home/notebooks
但是 docker 文件上的以下一个不会:
ENTRYPOINT ["/bin/sh", "-c"]
CMD ["jupyter", "lab", "--ip='0.0.0.0'", "--port=8888", "--no-browser", "--allow-root", "/home/notebooks"]
错误是:
usage: jupyter [-h] [--version] [--config-dir] [--data-dir] [--runtime-dir] [--paths] [--json] [subcommand]
jupyter: error: one of the arguments --version subcommand --config-dir --data-dir --runtime-dir --paths is required
显然/bin/sh -c 看到了jupyter 参数,但没有看到下面的参数。
有趣的是,
CMD ["jupyter", "lab", "--ip='0.0.0.0'", "--port=8888", "--no-browser", "--allow-root", "/home/notebooks"]
会正常运行,所以它不能是参数的数量,或者可以吗?
根据https://docs.docker.com/engine/reference/builder/#cmd,CMD的shell形式以/bin/sh -c执行。因此,从我的角度来看,我认为这两个版本几乎没有区别。但原因必须是当 ENTRYPOINT 和 CMD 同时存在时如何评估 exec 表单。
【问题讨论】:
标签: docker dockerfile