ENTRYPOINT 和 CMD 是 Dockerfile 中用于定义容器启动行为的两个关键指令,它们既有区别又常协同工作。以下是核心区别及使用场景的简明分析:
🔧 一、核心区别
特性 ENTRYPOINT CMD
定义 容器启动时必须执行的主命令(入口点) 主命令的默认参数或独立命令
覆盖方式 仅能通过 --entrypoint 覆盖 可直接在 docker run 后追加参数覆盖
行为优先级 更高:始终执行 较低:若 ENTRYPOINT 存在,CMD 作为其参数
执行模式 推荐 Exec 模式(如 [“/app”]) 推荐 Exec 模式(如 [“–port=80”])
数量限制 仅最后一个生效 仅最后一个生效
⚙️ 二、协作关系与典型场景
组合使用(最常见)
ENTRYPOINT 定义主命令,CMD 提供默认参数:
ENTRYPOINT ["python", "app.py"] # 固定主程序
CMD [“–host=0.0.0.0”, “–port=80”] # 默认参数
默认启动:python app.py --host=0.0.0.0 --port=80
自定义参数:docker run my-image --port=8080 → 覆盖为 python app.py --port=8080[citation:1][citation:3][citation:7]。
单独使用 ENTRYPOINT
强制固定容器行为(如必须运行的服务):
ENTRYPOINT ["nginx", "-g",