在 describe 或 kubelet 日志中没有明确记录错误原因时,基本都是因为 command 命令不合法导致的。
命令和参数说明
command 和 args 分别对应于 Dockerfile 中的 ENTRYPOINT 和 CMD。command 表示要执行的命令,args 是传递给该命令的参数。
- 如果
command和args均未填写,则使用 Dockerfile 中的配置。 - 如果填写了
command但未填写args,则 Dockerfile 默认配置会被忽略,执行输入的command(不带任何参数,当然command中可自带参数)。 - 如果未填写
command但填写了args,则 Dockerfile 中配置的ENTRYPOINT命令行会被执行,并将args中填写的参数追加到ENTRYPOINT中。 - 如果
command和args都填写了,则 Dockerfile 的配置被忽略,执行command并追加上args参数。例如:command: /test.sh,p1,p2args: p3,p4
关于 CMD 和 ENTRYPOINT 还有一点需要特别注意:如果一个 Dockerfile 中有多个 CMD 或 ENTRYPOINT,只有最后一个会生效,前面其他的都会被覆盖。
多条命令执行
Kubernetes 中,command 指令不允许直接执行多条命令。如果需要执行多条指令,可参照如下写法。
写法1
1 | - command: |
写法2(args 类似写 shell)
1 | command: ["/bin/sh", "-c"] |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!
