这是一个简单的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才能正常工作。
答案 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表单更可取。