首页/云/Docker 容器速查/docker import 从 tar 导入镜像
基础命令50 条

docker import 从 tar 导入镜像

把 rootfs tar 包导入成本地镜像,可用 --change 补 CMD/ENTRYPOINT 等配置;常用于迁移旧 rootfs 或恢复扁平快照。

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

docker import 是什么

import 把一份根文件系统归档(通常来自 docker export,也可以是其他来源的 tar)导入成本地镜像。产物是一个只有单层的镜像:没有构建历史,也没有启动命令、环境变量、端口声明这些元数据。因此导入之后通常要用 --change 追加指令补齐配置,否则容器可能启动即退出或行为与预期不符。

基本信息

语法docker import [选项] 文件或URL或- [仓库[:标签]]
常用选项-c/--change 追加 Dockerfile 指令(CMD、ENTRYPOINT、ENV、EXPOSE、WORKDIR、USER、LABEL、ONBUILD 等)
标准输入- 表示从标准输入读取,可配合解压管道
产物特性单层文件系统镜像,无历史记录
来源限制不能直接导入镜像归档(那属于 docker load)
安全提示导入不做扫描,来源不明的归档应先检查内容

典型使用场景

  • 从旧式根文件系统快照恢复出可运行镜像
  • 接收外部交付的 tar 包,需要快速变成镜像并在本地点起
  • 把某台机器上导出的文件系统做成基础镜像,再在其上构建业务镜像
  • 离线环境里处理没有镜像标签的历史归档
  • 与 export 配套使用:先导出用于分析,再按需导入回去

导入与补配置

导入与补配置
# 基础导入:只有文件系统内容,没有启动配置
docker import web-rootfs.tar app/web:imported

# 追加启动命令与工作目录,导入即有可运行配置
docker import --change 'CMD ["nginx","-g","daemon off;"]' \
  --change 'WORKDIR /usr/share/nginx/html' \
  --change 'EXPOSE 80' web-rootfs.tar app/web:imported

# 从标准输入导入(配合解压)
gzip -dc web-rootfs.tar.gz | docker import - app/web:stdin

# 核对导入结果与启动验证
docker image inspect app/web:imported --format '{{.Config.Cmd}} {{.Config.Entrypoint}} {{.Config.WorkingDir}}'
docker run --rm app/web:imported nginx -v

常见问题判读

现象原因处理方向
容器启动即退出没有 CMD/ENTRYPOINT用 --change 补启动命令
应用找不到文件缺少 WORKDIR 或路径假设不同补 WORKDIR 或改启动命令
外部访问不到服务没有 EXPOSE 声明(仅元数据)补 EXPOSE 并在运行时发布端口
以 root 运行不符合基线缺少 USER 指令补 USER,并核对文件属主
镜像只有一层import 的设计如此如需分层请走正常构建流程
EXPOSE 是声明而非发布:它只记录端口信息,真正对外暴露仍需运行时发布端口或编排文件里配置映射。
import 不会做任何内容检查,来源不明的 tar 包可能携带后门或多余账号。导入前建议解包检查关键目录,并在隔离环境先跑一遍再投入生产。

易错点

  • 不加 --change 时镜像没有启动命令,运行会立刻退出,容易被误判为镜像损坏
  • 把镜像归档交给 import:两者格式不同,应使用 docker load
  • import 不做安全扫描,来源不明的根文件系统先检查再使用
  • 导入产物只有一层,无法通过历史记录追溯内容来源,交付时应在标签或文档中注明出处

数据来源与参考

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