首页/云/Docker 容器速查/compose command 与 entrypoint 覆盖
Compose 编排55 条

compose command 与 entrypoint 覆盖

运行时覆盖镜像的启动命令:command 替换 CMD,entrypoint 替换 ENTRYPOINT;清空入口点用 entrypoint: []。

Docker 容器速查云更新于 2026-10-13

两个字段在做什么

command 与 entrypoint 是 Compose 里「运行时覆盖镜像启动指令」的一对字段:command 覆盖镜像的 CMD,entrypoint 覆盖镜像的 ENTRYPOINT。Docker 镜像把 ENTRYPOINT 当固定入口、CMD 当默认参数,Compose 只是把这套组合搬到编排文件里,让同一镜像在常驻服务、一次性任务、排障容器之间切换而不必重建镜像。

基本信息

适用平台Docker Compose v2(docker compose 子命令 / Compose Spec)
command覆盖镜像的 CMD(默认参数)
entrypoint覆盖镜像的 ENTRYPOINT(固定入口)
清空入口点entrypoint: [] 后由 command 直接作为主命令执行
生效时机容器创建时写入,改动后需重建容器

典型使用场景

  • 同一镜像跑多角色:常驻服务用镜像默认入口,定时任务用 command 跑一次性脚本
  • 排障保活:把 entrypoint 临时改成 shell 并 sleep 保活,进容器逐条验证命令
  • 初始化任务:清空 entrypoint 后直接执行 /app/init-db 之类的迁移脚本
  • 参数微调:只覆盖 command 换掉默认参数,保留镜像原有 ENTRYPOINT
  • CI 复用镜像:同一镜像分别执行测试命令与生产启动命令,减少镜像数量

覆盖写法示例

覆盖写法示例
services:
  api:                       # 常驻服务:保留镜像入口,只换运行参数
    image: app/api:1.4.2
    command: ['--config', '/etc/app/prod.yaml']
  debug:                     # 排障容器:改入口为 shell 并保活
    image: app/api:1.4.2
    entrypoint: ['/bin/sh', '-c']
    command: ['sleep infinity']
  once:                      # 一次性任务:清空入口点后直接执行脚本
    image: app/api:1.4.2
    entrypoint: []
    command: ['/app/init-db']
# 应用改动:docker compose up -d --force-recreate once

写法与行为对照

写法作用注意点
command: ['a','b']覆盖镜像 CMD列表形式不经 shell,参数原样传递
entrypoint: ['/bin/sh','-c']覆盖镜像 ENTRYPOINT需要管道与变量替换时用这种方式包一层
entrypoint: []清空 ENTRYPOINT让 command 直接成为主进程命令
command: 'echo hi'字符串形式按空格切分,语义与列表不同,迁移优先用列表
这类字段只在创建容器时写入,docker compose restart 不会重新读取编排文件里的改动,要执行 docker compose up -d(必要时加 --force-recreate)触发重建。
entrypoint 写成 shell 形式时,shell 会成为容器 PID 1,docker stop 发的信号不一定传到真正的应用进程;常驻服务尽量用 exec 列表形式。

易错点

  • 字符串形式与列表形式的参数切分规则不同:字符串会按空格拆并可能被 shell 解释,同一份编排在本地与 CI 上表现可能不一致,统一用列表形式最稳
  • 覆盖 entrypoint 会跳过镜像原有的初始化逻辑:很多镜像在 ENTRYPOINT 里顺带生成配置或准备数据目录,直接换掉会出现「进程起来了但服务不可用」
  • sleep infinity 只适合调试保活,误留在生产编排里会得到一个「看着在运行、实际不提供服务」的容器,依赖它的健康检查也会失真
  • 改了 command 却只执行 restart:Compose 不会因为重启而重写这组字段,判断是否升级成功前先确认容器创建时间已更新

数据来源与参考

  • Docker 官方文档:Compose command / entrypoint 参考(docs.docker.com/reference/compose-file/services)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌