docker import用于将rootfs tar包(如docker export生成的文件系统快照)导入为单层镜像,不保留元数据、历史层或配置,仅创建扁平化镜像,需手动指定标签并补充cmd等运行信息。
注意:docker import 导入的是镜像文件(tar 包),不是容器本身。它不从运行中的容器或已停止的容器直接导入,而是从一个 rootfs tar 归档文件 创建新镜像。
理解 docker import 的作用
`docker import` 用于将一个符合 Linux 根文件系统结构的 tar 包(通常由 `docker export` 生成,或手动打包的 rootfs)转换为 Docker 镜像。它不会保留原始容器的元数据(如 CMD、ENV、网络配置、挂载点等),只保留文件系统层。
基本语法与用法
命令格式:
docker import [选项] 文件路径或 URL [仓库名[:标签]]
常见用法示例:
- 从本地 tar 文件创建镜像:
docker import ubuntu-rootfs.tar my-ubuntu:1.0 - 从远程 HTTP 地址导入(需服务支持):
docker import http://example.com/rootfs.tar my-app:latest - 不指定标签时默认为
latest:
docker import centos-minimal.tar my-centos
如何准备可用的 tar 文件?
最常用来源是先用 docker export 导出某个容器的文件系统:
- 启动或找一个已存在的容器(比如 ID 是
a1b2c3d4):
docker run -d --name test-nginx nginx - 导出其文件系统为 tar:
docker export test-nginx > nginx-fs.tar - 再用 import 创建新镜像:
docker import nginx-fs.tar my-nginx:from-export
⚠️ 注意:docker export 导出的是容器当前状态的文件系统快照,不含历史层和镜像构建信息;docker import 会把该 tar 当作一层全新镜像,且默认没有 ENTRYPOINT/CMD,需后续用 docker tag 或重新构建补充。
import 后的镜像需要手动配置运行行为
导入后的镜像只是一个“裸”文件系统,Docker 不知道如何启动它。常见补救方式:
- 用
docker tag打标签后,配合docker run -it --rm测试是否可进入:
docker run -it --rm my-nginx:from-export /bin/bash - 若想设置默认命令,建议基于该镜像用
Dockerfile构建新镜像:FROM my-nginx:from-export<br>RUN apt-get update && apt-get install -y curl<br>CMD ["nginx", "-g", "daemon off;"]
- 也可用
docker commit替代 —— 如果你本意是保存容器当前状态(含运行时修改),docker commit 容器ID 新镜像名更合适,它保留了镜像层级和部分配置。
对比:import vs commit vs load
别混淆这几个命令:
- docker import → tar(rootfs)→ 新镜像(单层,无历史)
- docker commit → 正在运行/已停止的容器 → 新镜像(保留原镜像层+新增修改层)
-
docker load →
docker save生成的 tar(含完整镜像元数据)→ 恢复原镜像(含所有层、标签、历史)
如果你有完整的镜像备份(比如用 docker save -o img.tar nginx:alpine),应优先用 docker load,而非 import。











