首页/云/Docker 容器速查/docker run --entrypoint 覆盖入口点
基础命令50 条

docker run --entrypoint 覆盖入口点

临时替换镜像的 ENTRYPOINT 来调试镜像:改成 sh、cat、ls 等命令检查文件系统,不影响镜像本身。

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

覆盖入口点是什么

运行时替换镜像里固定的入口程序,用来临时换一种方式启动同一个镜像。最常见用途是换成 shell 或查看类命令进容器检查文件系统,排查「镜像里到底有什么」「启动脚本为什么失败」这类问题。它只影响本次运行,镜像本身不变。

基本信息

用法在启动命令里指定替换的入口程序,镜像名后跟它的参数
替换范围只替换入口程序,原默认命令会被作为参数传入
查看原值读镜像配置可看到当前的入口与默认命令
典型目标换成 shell、查看文件内容的命令、校验类命令
影响范围仅本次运行的容器,镜像配置不被修改

典型使用场景

  • 进容器排查:镜像默认入口是服务程序,临时换成 shell 检查目录与配置
  • 确认镜像内容:换成查看文件内容的命令,直接输出系统信息或配置
  • 验证启动脚本:换成解释器逐段执行入口脚本,定位失败位置
  • 跑一次性检查:换成校验命令检查配置语法,不真正启动服务
  • 绕过故障入口:入口脚本有缺陷导致容器起不来时,先换命令把容器跑起来取数据

常用示例

常用示例
docker run --rm -it --entrypoint sh nginx:1.27-alpine                 # 换成 shell 进容器
docker run --rm --entrypoint cat alpine:3.20 /etc/os-release         # 换成查看文件的命令
docker inspect -f '{{.Config.Entrypoint}} {{.Config.Cmd}}' nginx:1.27-alpine  # 查看原值
docker run --rm --entrypoint /bin/sh app/web:1.0 -c 'ls -l /app'     # 换入口并传参数

替换后的执行结果

写法实际执行说明
只运行镜像原入口加原默认命令镜像的默认行为
替换入口,不给参数新入口加原默认命令原默认命令作为参数传入,容易被忽略
替换入口并给参数新入口加新参数调试时最常用的写法
在镜像名后给命令原入口加新命令默认命令被替换,入口不变
镜像无入口新命令直接执行替换等价于指定启动命令

使用时的注意点

  • 替换值是可执行文件本身,参数要写在镜像名之后,混在替换值里会被当成路径的一部分
  • 原默认命令仍可能被追加为参数,参数不符预期时先确认镜像的默认命令内容
  • 精简镜像里没有 shell,替换成 shell 会直接报找不到文件,可换成该镜像实际有的工具
  • 覆盖入口属于临时手段,镜像启动逻辑的问题应在构建描述里修正
  • 排查完成后按原入口重新运行,避免长期使用临时启动方式
替换入口不会改动镜像。构建描述里的入口与默认命令依然保持原样,下次正常运行容器时仍按原逻辑启动。
想确认替换后的完整启动命令,可以先看镜像配置里的两个字段,再结合运行参数推导,比反复试跑更快。

易错点

  • 把参数写进替换值里导致报找不到可执行文件,参数应当放在镜像名之后
  • 忽略了原默认命令仍会被追加,参数重复或冲突,行为与预期不同
  • 在精简镜像里替换成 shell,镜像内根本没有该程序,替换失败
  • 把临时覆盖当成长期方案,问题一直在,每次启动都要手工加参数

数据来源与参考

  • Docker 官方 CLI 参考:docker run --entrypoint(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌