提升网站权重,网站专题方案,网站建设与技术团队,自己的网站统计输入词写在前面 前几天被问到#xff0c;这里整理笔记之前也没怎么注意这个问题理解不足小伙伴帮忙指正 曾以为老去是很遥远的事#xff0c;突然发现年轻是很久以前的事了。时光好不经用#xff0c;抬眼已是半生#xff0c;所谓的中年危机#xff0c;真正让人焦虑的不是孤单、不…写在前面 前几天被问到这里整理笔记之前也没怎么注意这个问题理解不足小伙伴帮忙指正 曾以为老去是很遥远的事突然发现年轻是很久以前的事了。时光好不经用抬眼已是半生所谓的中年危机真正让人焦虑的不是孤单、不是贫穷、更不是衰老而是人到中年你才发现你从来没有按照自己喜欢的方式活过这烟火人间事事值得、事事与遗憾该用多懂事的理智去压抑住心中的不甘与难过。 ——余华《活着》 K8s Pod中的 command、args 的配置会覆盖 Dockerfile 中 ENTRYPOINT 和 CMD 指令, 具体 command 命令代替 ENTRYPOINT 的命令行args 代替 CMD 的参数。但是 并不是说 他们是一个等价的覆盖关系。
具体的问题具体分析这里我们准备一个镜像做简单测试
┌──[rootvms100.liruilongs.github.io]-[~/docker]
└─$docker build -t liruilong/my-busybox:latest -EOFFROM busybox:latestENTRYPOINT [printenv]CMD [HOSTNAME, KUBERNETES_PORT]EOF
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM busybox:latest--- beae173ccac6
Step 2/3 : ENTRYPOINT [printenv]--- Using cache--- 490cf6028e36
Step 3/3 : CMD [HOSTNAME, KUBERNETES_PORT]--- Using cache--- 497b83a63aad
Successfully built 497b83a63aad
Successfully tagged liruilong/my-busybox:latest上面的 Dockerfile 基础镜像使用 busybox:latest, 添加了 CMD 和 ENTRYPOINT 指令 构建好的镜像上传 hub.docker 仓库。
┌──[rootvms100.liruilongs.github.io]-[~]
└─$docker login
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
┌──[rootvms100.liruilongs.github.io]-[~/docker]
└─$docker push liruilong/my-busybox:latest
The push refers to repository [docker.io/liruilong/my-busybox]
...然后我们使用 kubectl 做下具体的测试对应四种情况。 command 和 args 均没有指定这种情况会使用 Dockerfile 的配置的 ENTRYPOINT 和 CMD ┌──[rootvms100.liruilongs.github.io]-[~/ansible/commm_args]
└─$kubectl run demo --image liruilong/my-busybox -n demo
pod/demo created┌──[rootvms100.liruilongs.github.io]-[~/ansible/commm_args]
└─$kubectl logs demo -n demo
demo
tcp://10.96.0.1:443直接使用的 Dockerfile 中的配置
ENTRYPOINT [printenv]
CMD [HOSTNAME, KUBERNETES_PORT]command 和 args 都指定了那么 Dockerfile 的配置 ENTRYPOINT 和 CMD 被忽略执行 command 并追加上 args 参数。 apiVersion: v1
kind: Pod
metadata:labels:run: demoname: demonamespace: demo
spec:containers:- command:- echoargs:- 山河已无恙image: liruilong/my-busyboximagePullPolicy: Alwaysname: demo通过日志可以看到覆盖了 Dockerfile 中的配置
┌──[rootvms100.liruilongs.github.io]-[~/docker]
└─$kubectl apply -f demo.yaml
pod/demo created
┌──[rootvms100.liruilongs.github.io]-[~/docker]
└─$kubectl logs demo -n demo
山河已无恙command 没有指定指定了 args那么 Dockerfile 中配置的 ENTRYPOINT 的命令行会被执行CMD 会被 args 中填写的参数覆盖, 追加到 ENTRYPOINT 中。 apiVersion: v1
kind: Pod
metadata:labels:run: demoname: demonamespace: demo
spec:containers:- args:- PATHimage: liruilong/my-busyboximagePullPolicy: Alwaysname: demoCMD 指令被覆盖
┌──[rootvms100.liruilongs.github.io]-[~/docker]
└─$kubectl logs demo -n demo
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bincommand 指定, args 没有指定那么 Dockerfile 默认的 ENTRYPOINT 配置会被忽略执行输入的 command,同时 Dockerfile 中的 CMD 也会被忽略。 apiVersion: v1
kind: Pod
metadata:labels:run: demoname: demonamespace: demo
spec:containers:- command:- echo- 山河已无恙- 活着image: liruilong/my-busyboximagePullPolicy: Alwaysname: demo这个有些特殊需要注意下只指定了command 但是 entrypoint 被覆盖 cmd 被忽略
┌──[rootvms100.liruilongs.github.io]-[~/docker]
└─$kubectl logs demo -n demo
山河已无恙 活着指定的 CMD 并没有拼到后面
CMD [HOSTNAME, KUBERNETES_PORT]博文部分内容参考
© 文中涉及参考链接内容版权归原作者所有如有侵权请告知。 https://kubernetes.io/zh-cn/docs/tasks/inject-data-application/define-command-argument-container/#notes © 2018-2023 liruilongergmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)