Dockerfile 构建继承父镜像的 ENTRYPOINT 和 CMD

在 Docker 中,Dockerfile 是否继承其父映像的 ENTRYPOINTCMD,取决于 Dockerfile 的编写方式。以下是规则:

1. CMD****的继承

  • 子镜像会继承父映像的 CMD,但如果在子镜像的 Dockerfile 中显式定义了新的 CMD,就会覆盖父映像的 CMD
  • 如果子镜像未指定 CMD,则会保留父映像的 CMD

2. ENTRYPOINT****的继承

  • 子镜像也会继承父映像的 ENTRYPOINT,但如果在子镜像的 Dockerfile 中显式定义了新的 ENTRYPOINT,则会覆盖父映像的 ENTRYPOINT 和 CMD
  • 如果子镜像未定义 ENTRYPOINT,父映像的 ENTRYPOINT 会保留。

3. ENTRYPOINT****和 CMD****的关系

  • 如果两个都定义,CMD 的作用是为 ENTRYPOINT 提供默认参数。
  • 如果覆盖了 ENTRYPOINT,父映像的 CMD 可能失去作用,除非新的 ENTRYPOINT 设计为支持这些参数。

这个行为在 kubernetes 的 yaml 中覆盖容器命令同样适用

此外 WORKDIR 命令也是遵守这个规则:

Dockerfile中的WORKDIR指令在子镜像中也是会继承父镜像的。如果在父镜像中已经设置了WORKDIR,那么在子镜像中,你不需要再显式地设置WORKDIR,它将自动继承父镜像的工作目录。

然而,如果在子镜像中你重新设置了WORKDIR,那么新的设置会覆盖父镜像的WORKDIR指令。

简而言之:

  1. 继承 :如果子镜像没有显式设置WORKDIR,它会继承父镜像的工作目录。
  2. 覆盖 :如果子镜像中使用了WORKDIR,它会覆盖父镜像的设置。
相关推荐
张忠琳12 分钟前
【client-go v0.36.1】LeaderElection 深度分析(上篇)— 模块定位、结构、LeaderElector 核心逻辑
云原生·kubernetes·client-go·leaderelection
牛奶咖啡131 小时前
k8s容器编排技术实践——K8s中服务发现ingress、ingress controller 应用实践
kubernetes·服务发现·ingress·ingress-nginx·部署ingress-nginx·部署ingress的三种方法·ingress的服务发现原理
l1t1 小时前
DeepSeek总结的使用 Docker 对 PostgreSQL 进行 Beta 测试
docker·postgresql·容器
张忠琳2 小时前
【client-go v0.36.1】tools/cache 深度分析(中篇)— 辅助组件逐行解析
云原生·kubernetes·cache·informer·client-go
暮云星影7 小时前
个人总结 docker 常用命令
docker·容器
张忠琳7 小时前
【client-go v0.36.1】WorkQueue 深度分析(下篇)— 限流队列、限流器、指标、并行化
云原生·kubernetes·informer·workqueue·client-go
极客先躯8 小时前
高级java每日一道面试题-2026年01月19日-实战篇[Docker]-如何配置镜像仓库的垃圾回收 (GC)?
java·运维·docker·容器
日取其半万世不竭8 小时前
low-memory-server-swap-20260601
docker·容器·https
暮云星影8 小时前
个人总结 docker搭建PDF操作工具
docker·容器·pdf
zhoupenghui1689 小时前
AI大模型应用部署之Flask框架使用
运维·python·docker·容器·flask·flask框架