覆盖入口点是什么
运行时替换镜像里固定的入口程序,用来临时换一种方式启动同一个镜像。最常见用途是换成 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 会直接报找不到文件,可换成该镜像实际有的工具
- 覆盖入口属于临时手段,镜像启动逻辑的问题应在构建描述里修正
- 排查完成后按原入口重新运行,避免长期使用临时启动方式
替换入口不会改动镜像。构建描述里的入口与默认命令依然保持原样,下次正常运行容器时仍按原逻辑启动。
想确认替换后的完整启动命令,可以先看镜像配置里的两个字段,再结合运行参数推导,比反复试跑更快。