在describe或kubelet日志中没有明确记录错误原因,基本都是因为command命令不合法导致

命令和参数说明:
commandargs 分别对应于 Dockerfile 中的 ENTRYPOINTCMDcommand 表示要执行的命令,args 是传递给该命令的参数。

如果command和args均没有写,那么用Dockerfile的配置。
如果command写了,但args没有写,那么Dockerfile默认的配置会被忽略,执行输入的command(不带任何参数,当然command中可自带参数)。
如果command没写,但args写了,那么Dockerfile中配置的ENTRYPOINT的命令行会被执行,并且将args中填写的参数追加到ENTRYPOINT中。
如果command和args都写了,那么Dockerfile的配置被忽略,执行command并追加上args参数。比如:

command:/test.sh,p1,p2
args: p3,p4

关于CMD和ENTRYPOINT还有一点需要特别注意的是:如果一个Dockerfile中有多个CMD或ENTRYPOINT,只有最后一个会生效,前面其他的都会被覆盖

多条命令执行

kubernetes中,command 指令不允许执行多条命令。如果需要执行多条指令,可参照如下写法

写法1

1
2
3
4
5
6
7
8
9
- command:
- /bin/sh
- -c
- |
echo hello &&
i=0 &&
while ((i<5)); do echo hello${i}; i=$((i+1)); done

# 然后不要添加args

写法2(args类似写shell)

1
2
3
4
5
6
7
8
9
10
command: ["/bin/sh","-c"]
args:
- |
echo hello
i=0
while ((i<5))
do
echo hello${i}
i=$((i+1))
done