当ENTRYPOINT是一个shell脚本时,Docker CMD很奇怪

时间:2015-10-19 15:21:25

标签: docker dockerfile

这是一个简单的Dockerfile

FROM centos:6.6
ENTRYPOINT ["/bin/bash", "-l", "-c"]
CMD ["echo", "foo"]

不幸的是它不起作用。当您运行生成的结果容器时,没有任何内容回显 如果您注释掉ENTRYPOINT,那么它就可以了。但是,如果您将ENTRYPOINT设置为/bin/sh -c,则会再次失败

FROM centos:6.6
ENTRYPOINT ["/bin/sh", "-c"]
CMD ["echo", "foo"]

我认为这是一个没有定义的容器的默认ENTRYPOINT,为什么不起作用?

最后,这也有效

FROM centos:6.6
ENTRYPOINT ["/bin/bash", "-l", "-c"]
CMD ["echo foo"]

在我提交问题之前,我想看看我做错了什么? 我在容器中使用rvm,这需要一个登录shell才能正常工作。

1 个答案:

答案 0 :(得分:2)

请注意default entry point/cmd for an official centos 6 image是:

  • 没有入口点
  • CMD ["/bin/bash"]

如果您使用-c命令,则需要传递一个参数(这是完整命令):"echo foo"
不是一系列参数(CMD ["echo", "foo"])。

dockerfile CMD部分所述:

  

如果您使用CMD的shell表单,那么<command>将在/bin/sh -c中执行:

FROM ubuntu
CMD echo "This is a test." | wc -
  

如果您想在没有shell的情况下运行<command>,那么您必须将该命令表示为JSON数组并提供可执行文件的完整路径

Since echo is a built-in command in the bash and C shells,此处的shell表单更可取。