K8s: Pod 中 command、args 与 Dockerfile 中 CMD ENTRYPOINT 的对应关系
曾以为老去是很遥远的事,突然发现年轻是很久以前的事了。时光好不经用,抬眼已是半生,所谓的中年危机,真正让人焦虑的不是孤单、不是贫穷、更不是衰老,而是人到中年你才发现,你从来没有按照自己喜欢的方式活过,这烟火人间,事事值得、事事与遗憾,该用多懂事的理智,去压抑住心中的不甘与难过。 ——余华《活着》
写在前面
- 前几天被问到,这里整理笔记
- 之前也没怎么注意这个问题
- 理解不足小伙伴帮忙指正
曾以为老去是很遥远的事,突然发现年轻是很久以前的事了。时光好不经用,抬眼已是半生,所谓的中年危机,真正让人焦虑的不是孤单、不是贫穷、更不是衰老,而是人到中年你才发现,你从来没有按照自己喜欢的方式活过,这烟火人间,事事值得、事事与遗憾,该用多懂事的理智,去压抑住心中的不甘与难过。 ——余华《活着》
K8s Pod中的 command、args
的配置会覆盖 Dockerfile
中 ENTRYPOINT
和 CMD
指令, 具体 command
命令代替 ENTRYPOINT
的命令行,args
代替 CMD
的参数。但是 并不是说 他们是一个等价的覆盖关系。
具体的问题具体分析,这里我们准备一个镜像做简单测试
1 | ┌──[root@vms100.liruilongs.github.io]-[~/docker] |
上面的 Dockerfile 基础镜像使用 busybox:latest
, 添加了 CMD
和 ENTRYPOINT
指令 ,构建好的镜像上传 hub.docker 仓库。
1 | ┌──[root@vms100.liruilongs.github.io]-[~] |
然后我们使用 kubectl
做下具体的测试,对应四种情况。
command
和args
均没有指定,这种情况会使用Dockerfile
的配置的ENTRYPOINT
和CMD
1 | ┌──[root@vms100.liruilongs.github.io]-[~/ansible/commm_args] |
1 | ┌──[root@vms100.liruilongs.github.io]-[~/ansible/commm_args] |
直接使用的 Dockerfile
中的配置
1 | ENTRYPOINT ["printenv"] |
command
和args
都指定了,那么 Dockerfile 的配置ENTRYPOINT
和CMD
被忽略,执行command
并追加上args
参数。
1 | apiVersion: v1 |
通过日志可以看到覆盖了 Dockerfile
中的配置
1 | ┌──[root@vms100.liruilongs.github.io]-[~/docker] |
command
没有指定,指定了args
,那么 Dockerfile 中配置的ENTRYPOINT
的命令行会被执行,CMD
会被args
中填写的参数覆盖, 追加到ENTRYPOINT
中。
1 | apiVersion: v1 |
CMD
指令被覆盖
1 | ┌──[root@vms100.liruilongs.github.io]-[~/docker] |
command
指定,args
没有指定,那么 Dockerfile 默认的ENTRYPOINT
配置会被忽略,执行输入的command
,同时 Dockerfile 中的 CMD 也会被忽略。
1 | apiVersion: v1 |
这个有些特殊,需要注意下,只指定了command
,但是 entrypoint
被覆盖 ,cmd
被忽略
1 | ┌──[root@vms100.liruilongs.github.io]-[~/docker] |
指定的 CMD
并没有拼到后面
1 | CMD ["HOSTNAME", "KUBERNETES_PORT"] |
博文部分内容参考
© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知。
© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)
K8s: Pod 中 command、args 与 Dockerfile 中 CMD ENTRYPOINT 的对应关系
1.Kubernetes 触发 OOMKilled(内存杀手)如何排除故障
2.K8s:K8s 20个常用命令汇总
3.K8s:Kubernetes 故障排除方法论
4.K8s:通过 Pod 干扰预算(PDB)提高节点故障、维护期间 Pod 频繁调度时工作负载的可用性
5.K8s:Kube-proxy 使用 iptables 模式时,通过 Service 服务发布入口如何到达 Pod ?
6.K8s 中跨主机 Pod 之间是如何通信的(SDN 使用 Calico)?
7.K8s:通过 Kubeshark 体验 大白鲨(Wireshark)/TCPDump 监控 Kubernetes 集群
8.关于 K8s 中 Open Kruise 的一些笔记整理