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

这是一个简单的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才能正常工作.

最佳答案 请注意,
default entry point/cmd for an official centos 6 image是:

>没有入口点
>只有CMD [“/ bin / bash”]

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

dockerfile CMD部分所述:

If you use the shell form of the CMD, then the <command> will execute in /bin/sh -c:

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

If you want to run your <command> without a shell then you must express the command as a JSON array and give the full path to the executable

Since echo is a built-in command in the bash and C shells,这里的壳形式是优选的.

点赞