K8s:Pod 中 command、args 与 Dockerfile 中 CMD、 ENTRYPOINT 的对应关系
写在前面
- 前几天被问到,这里整理笔记
- 之前也没怎么注意这个问题
- 理解不足小伙伴帮忙指正
曾以为老去是很遥远的事,突然发现年轻是很久以前的事了。时光好不经用,抬眼已是半生,所谓的中年危机,真正让人焦虑的不是孤单、不是贫穷、更不是衰老,而是人到中年你才发现,你从来没有按照自己喜欢的方式活过,这烟火人间,事事值得、事事与遗憾,该用多懂事的理智,去压抑住心中的不甘与难过。 ——余华《活着》
K8s Pod中的 command、args 的配置会覆盖 Dockerfile 中 ENTRYPOINT 和 CMD 指令, 具体 command 命令代替 ENTRYPOINT 的命令行,args 代替 CMD 的参数。但是 并不是说 他们是一个等价的覆盖关系。
具体的问题具体分析,这里我们准备一个镜像做简单测试
┌──[root@vms100.liruilongs.github.io]-[~/docker]
└─$docker build -t liruilong/my-busybox:latest -<<EOF
> FROM busybox:latest
> ENTRYPOINT ["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 仓库。
┌──[root@vms100.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
┌──[root@vms100.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
┌──[root@vms100.liruilongs.github.io]-[~/ansible/commm_args]
└─$kubectl run demo --image liruilong/my-busybox -n demo
pod/demo created
┌──[root@vms100.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 中的配置
┌──[root@vms100.liruilongs.github.io]-[~/docker]
└─$kubectl apply -f demo.yaml
pod/demo created
┌──[root@vms100.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: demo
CMD 指令被覆盖
┌──[root@vms100.liruilongs.github.io]-[~/docker]
└─$kubectl logs demo -n demo
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
command指定,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 被忽略
┌──[root@vms100.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 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)
相关文章:
K8s:Pod 中 command、args 与 Dockerfile 中 CMD、 ENTRYPOINT 的对应关系
写在前面 前几天被问到,这里整理笔记之前也没怎么注意这个问题理解不足小伙伴帮忙指正 曾以为老去是很遥远的事,突然发现年轻是很久以前的事了。时光好不经用,抬眼已是半生,所谓的中年危机,真正让人焦虑的不是孤单、不…...
Visual Studio Code (VS Code)安装教程
Visual Studio Code(简称“VS Code”)。 1.下载安装包 VS Code的官网: Visual Studio Code - Code Editing. Redefined 首先提及一下,vscode是不需要破解操作的; 第一步,看好版本,由于我的系…...
技巧 | 如何解决 zsh: permission denied 问题 | Mac
技巧 | 如何解决 zsh: permission denied 问题 | Mac 问题描述 在 macOS 系统终端执行 sh 程序脚本时,抛出异常 zsh: permission denied 原因分析 用户没有权限,所以才出现了这个错误,所以只需要用 chmod 修改一下权限就可以了 解决方法…...
【JavaEE】线程安全的集合类 -- 多线程篇(9)
线程安全的集合类 多线程环境使用 ArrayList多线程环境使用队列多线程环境使用哈希表 多线程环境使用 ArrayList 自己使用同步机制 (synchronized 或者 ReentrantLock)Collections.synchronizedList(new ArrayList); synchronizedList 是标准库提供的一个基于 synchronized 进…...
【MySQL架构篇】MySQL字符集、大小写规范及默认数据库
文章目录 1. 字符集与字符集比较规则2. 大小写规范3. 默认数据库4. 与文件系统相关 1. 字符集与字符集比较规则 MySQL有4个级别的字符集和比较规则,分别是 服务器级别数据库级别表级别列级别 当创建对应表或列未指定字符集时,默认会取其上一级别的字符…...
【Linux系统编程】命令模式2
目录 一,Linux下的初阶认识 1,管道 2,时间戳 二,Liunx系统命令操作 1,date时间指令 2,cal日历指令 3,which和find查找指令 3-1,which指令: 3-2,find…...
【Leetcode】【中等】1726.同积元组
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/tuple-with-same-product/ 给你…...
Git教程
文章目录 Git 介绍GIt历史Git 安装环境配置工作区、缓存区和仓库区(版本库)工作区(工作目录)暂存区仓库区git工作目录下文件的装填 Git 生成公钥及添加到gitlab或Gerrit上Git常用命令git stautsgit statu -sgit addgit commitgit reset1. git reset --ha…...
使用序列化技术保存数据 改进 IO流完成项目实战水果库存系统
上一节内容是 使用IO流完成项目实战水果库存系统https://blog.csdn.net/m0_65152767/article/details/133999972?spm1001.2014.3001.5501 package com.csdn.fruit.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java…...
0基础学习PyFlink——使用PyFlink的Sink将结果输出到外部系统
在《0基础学习PyFlink——使用PyFlink的SQL进行字数统计》一文中,我们直接执行了Select查询操作,在终端中直接看到了查询结果。 select word, count(1) as count from source group by word; ------------------------------------------------------ |…...
会声会影2024旗舰版详细功能介绍
随着网络视频的蓬勃发展,越来越多的人开始涉足视频剪辑领域,毕竟技多不压身嘛。在众多剪辑软件中,剪映和会声会影是备受新手青睐的两种。那么,会声会影和剪映哪个好呢?在它们之间,哪一个更适合初学者呢接&a…...
QtCreator 查看类帮助文档,快捷键操作:按两次F1 全屏帮助,Esc取消全屏
如何查看类帮助文档 选择类,按F1查看类帮助文档。 示例: #include <QLabel> // 将光标放在QLabel上,按F1右侧弹出的类帮助手册可视宽度很小,如果按两次 F1 键,帮助文档将会以全屏模式显示,以便更清…...
C语言文件操作(1)
C语言文件操作(1) 文章目录 C语言文件操作(1)一、理解文件1.概述2.分类①.正常角度②.文本文件和二进制文件 二、文件的打开和关闭1.流和标准流2.文件类型指针3.文件的打开和关闭以及使用类型 三、文件缓冲区 一、理解文件 1.概述…...
adb 操作命令(adb调试QT项目使用到的命令)
1.adb连接串口 获取root权限 adb root && adb remount && adb shell2.测试串口命令 stty -F /dev/ttyS4 cs8 -parenb -cstopb -echoecho "12345\n" > /dev/ttyS8cat /dev/ttyS4 &3.软件在安卓系统上的名字已经活动名称(下面是示…...
mysql下载和安装,使用
先下载安装 官方下载 已下载备份软件 安装,一路下一步设置环境变量 4. 打开一个cmd,输入mysql -u root -p...
Redis底层核心数据结构详解
文章目录 一、深入String(SDS)1. 字符串简介2. SDS存在的意义3. SDS结构设计4. SDS与C字符串的区别4.1 常数复杂度获取字符串长度4.2 杜绝缓冲区溢出4.3 二进制安全4.4 SDS API 5 小结 二、深入List (QuickList)1. 链表节点结构设计2. Redis的链表实现的…...
如何学会从产品经理角度去思考问题?
如何学会从产品经理角度去思考问题? 从产品经理的角度思考问题意味着你需要关注产品从构思到上市全过程中的各个方面,包括用户需求、市场趋势、设计、开发、测试、上市后的用户反馈等。以下是一些策略和方法,帮助你培养从产品经理角度思考问…...
正则表达式的神奇世界:表达、匹配和提取
正则表达式的神奇世界:表达、匹配和提取 前言第一: 什么是正则表达式?第二: 字符匹配和量词:1. 字符匹配:2. 量词:3. 贪婪和非贪婪匹配: 第三:字符类和元字符1. 字符类&a…...
密码登录虽安全,但有时很麻烦!如何禁用或删除Windows 11中的密码登录
如果你想在Windows 11上自动登录,在本指南中,我们将向你展示如何删除你的帐户密码。 在Windows 11上,你可以至少通过三种方式从帐户中删除登录密码。在你的帐户上使用密码有助于保护你的计算机和文件免受来自internet或本地的未经授权的访问。然而,在某些情况下,密码可能…...
Python实现的快速排序代码
Python实现的快速排序代码 def bubble_sort(arr): n len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j1]: arr[j], arr[j1] arr[j1], arr[j] return arr 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,…...
不用等IT排期:ChatBI如何让业务人员1分钟拿到业务洞察
开篇:3个业务人员天天遇到的取数难题难题一: 运营团队要复盘上周的大促返场活动效果—— 需要查新客转化率、客单价、渠道ROI等12个核心指标。 提交IT取数工单,排期要3天。 等数据出来的时候,下一轮投放的预算已经审批完了——错过…...
深入MiniCPM-o-4.5-nvidia-FlagOS:理解大模型背后的计算机组成原理
深入MiniCPM-o-4.5-nvidia-FlagOS:理解大模型背后的计算机组成原理 你是不是也好奇,像MiniCPM-o-4.5这样的大模型,为什么能在NVIDIA的GPU上跑得飞快?为什么换个显卡,生成速度就能天差地别?这背后ÿ…...
Qwen3-TTS语音克隆3秒上手:10种语言一键合成,新手5分钟快速部署
Qwen3-TTS语音克隆3秒上手:10种语言一键合成,新手5分钟快速部署 1. 引言 想象一下,你手头有一段3秒钟的录音,可能是你自己的声音,也可能是某个特定角色的声音。现在,你想让AI用这个声音,说出任…...
【K8s】【笔记】----- 第一章 :Kubernetes 介绍
【K8s】【笔记】----第一章:Kubernetes 介绍 【K8s】【笔记】----第二章:Kubernetes 集群环境搭建 【K8s】【笔记】----第三章:Kubernetes 资源管理 【K8s】【笔记】----第四章:Kubernetes 实战入门 【K8s】【笔记】----第五章&am…...
2026年智能窗帘电机核心揭秘:一颗二极管的原厂选择如何决定体验?
当清晨的第一缕阳光透过窗户,你设定的智能窗帘电机开始平稳、安静地工作,这背后不仅是算法的精准,更是无数微小电子元件的可靠协作。在智能家居设备的核心——电机驱动板上,一颗看似不起眼的二极管,却常常是决定产品成…...
26年前端面试新时代,问了几个AI题没人会怎么给offer???
当“你会不会用Copilot”成了第一题,全场沉默的那三秒,我看到了普通前端的末日。上周,朋友圈被一位36岁老哥的帖子刷屏了。他说自己已经摸清了“前端AI”面试的拷打套路,从被问到卡壳,到能跟面试官聊AI工程化的落地细节…...
如何轻松重置IDE试用期:终极JetBrains插件配置指南
如何轻松重置IDE试用期:终极JetBrains插件配置指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经在使用JetBrains系列IDE时,突然发现30天的试用期已经结束?那种感觉…...
终极Tree of Thoughts实战指南:10个复杂问题解决案例详解
终极Tree of Thoughts实战指南:10个复杂问题解决案例详解 【免费下载链接】tree-of-thoughts Plug in and Play Implementation of Tree of Thoughts: Deliberate Problem Solving with Large Language Models that Elevates Model Reasoning by atleast 70% 项目…...
【算法优化】基于网格划分的高效DBSCAN改进策略
1. 为什么需要优化DBSCAN算法? 第一次接触DBSCAN算法时,我被它的聚类能力惊艳到了——不需要预先指定簇数量,还能识别任意形状的簇。但当我用真实数据集测试时,电脑直接卡死,这才发现传统DBSCAN的O(n)时间复杂度有多可…...
ChatGLM3-6B与Kubernetes集成:云原生部署实战
ChatGLM3-6B与Kubernetes集成:云原生部署实战 1. 引言 在人工智能快速发展的今天,如何高效部署和管理大语言模型成为了许多开发者和企业面临的实际问题。传统的单机部署方式虽然简单,但在面对高并发访问、弹性扩缩容和故障恢复等场景时显得…...
