k8s之command、args 与 CMD、ENTRYPOINT的对应关系

您所在的位置:网站首页 devil和monster的区别 k8s之command、args 与 CMD、ENTRYPOINT的对应关系

k8s之command、args 与 CMD、ENTRYPOINT的对应关系

2023-04-02 03:31| 来源: 网络整理| 查看: 265

一、介绍

Pod中command、args与Dockerfile中ENTRYPOINT、CMD的覆盖关系。

具体的是 command 命令代替 ENTRYPOINT 的命令行,args代替 CMD 的参数。但是 并不是说 他们是一个等价的覆盖关系。

二、Dockerfile > FROM busybox:latest > ENTRYPOINT ["printenv"] > CMD ["HOSTNAME", "KUBERNETES_PORT"]

Dockerfile中的CMD和ENTRYPONIT同时支持Shell格式和Exec格式

Shell格式 CMD echo "hello docker" ENTRYPOINT echo "hello docker" Exec格式(不推荐) ENTRYPOINT ["echo", "hello docker"] CMD ["echo", "hello docker"]

只有shell形式才会直接获取相关环境变量,如$HOME

Exec格式需要以shell脚本的方式去执行才能获取相关环境变量

CMD ["sh", "-c", "echo hello $NAME"]

三、Pod yaml apiVersion: v1 kind: Pod metadata: labels: run: demo name: demo namespace: demo spec: containers: - command: - echo args: - "小A" image: liruilong/my-busybox imagePullPolicy: Always name: demo 以Shell方式运行(注意,和;) command: ["/bin/sh"] args: ["-c", "while true; do echo hello; sleep 10;done"] 或 args: ["/bin/sh", "-c", "while true; do echo hello; sleep 10;done"] 读取环境变量 env: - name: MESSAGE value: "hello world" command: ["/bin/echo"] args: ["$(MESSAGE)"] 四、覆盖关系 ENTRYPOINTCMDcommandargs 结果启动命令exec-1  cmd-1ENTRYPOINT追加CMDexec-1 cmd-1exec-1  cmd-1exec-2cmd-2command追加argsexec-2 cmd-2exec-1  cmd-1cmd-2ENTRYPOINT追加argsexec-1 cmd-2exec-1  cmd-1exec-2commandexec-2

五、总结

command 和 args 均没有指定,这种情况会使用 Dockerfile 的配置的 ENTRYPOINT 和 CMD。

command 和 args 都指定了,那么 Dockerfile 的配置 ENTRYPOINT 和 CMD 被忽略,执行 command 并追加上 args 参数。

command 没有指定,指定了 args,那么 Dockerfile 中配置的 ENTRYPOINT 的命令行会被执行,CMD 会被 args 中填写的参数覆盖,追加到 ENTRYPOINT 中。

command 指定,args 没有指定,那么 Dockerfile 默认的 ENTRYPOINT 配置会被忽略,执行输入的 command,同时 Dockerfile 中的 CMD 也会被忽略。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3