k8s之command、args 与 CMD、ENTRYPOINT的对应关系 |
您所在的位置:网站首页 › devil和monster的区别 › k8s之command、args 与 CMD、ENTRYPOINT的对应关系 |
一、介绍
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 |