指定 Docker 和 K8S 的命令以及用户
Dockerfile 中的 CMD 和 ENTRYPOINT
官网的描述
The CMD instruction has three forms:
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)
ENTRYPOINT has two forms:
ENTRYPOINT ["executable", "param1", "param2"] (exec form, which is the preferred form)
ENTRYPOINT command param1 param2 (shell form)
CMD 是可执行命令还是参数,取决于有没有定义 ENTRYPOINT
如果有定义 ENTRYPOINT 那么 CMD 就是 ENTRYPOINT 的参数
如果没定义 ENTRYPOINT 那么 CMD 就是可执行命令
CMD 和 ENTRYPOINT 都可以被 docker run 覆盖
docker run 命令中 image 后面的参数会覆盖 CMD
docker run 命令中 --entrypoint 的参数可以覆盖 ENTRYPOINT
docker run --entrypoint=<ENTRYPOINT> <image-tag> <CMD>
Dockerfile 是可以同时指定 CMD 和 ENTRYPOINT 的
K8S 中的 command 和 args
command 用于覆盖 Dockerfile 中的 ENTRYPOINT
args 用于覆盖 Dockerfile 中的 CMD
如果既没指定 command 也没指定 args,那么使用 Dockerfile 的配置
如果既有指定 command 也有指定 args,那么忽略 Dockerfile 的配置
如果只是指定 command 没有指定 args,那么 command 替换 ENTRYPOINT,但是会忽略 CMD
如果没有指定 command 只是指定 args,那么 args 替换 CMD 作为 ENTRYPOINT 的参数,或者作为可执行命令 (如果没有 ENTRYPOINT)
Dockerfile 的 USER
USER 用于指定默认的启动用户,docker run 可以通过 --user 参数改变
## 必须指定 uid 而不是用户名,例如 root 的 uid 是 0
docker run -ti --network=host --entrypoint=<ENTRYPOINT> --user <user-id> <image-tag> <CMD>
如果是进入到容器里,再切用户通常都不好做
K8S 的 User
K8S 可以通过 runAsUser 字段,使用 uid,替换 Dockerfile 定义的 USER
containers:
- name: ...
image: ...
securityContext:
runAsUser: 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署