在日常运维工作中,经常会遇到需要把一个已经打包好的 ref="/tag/2019/" style="color:#874873;font-weight:bold;">Docker 镜像从一台机器迁移到另一台无法联网或网络受限的服务器上。这时候,用 docker save 导出的 tar 文件就派上用场了。而如何正确加载这个 tar 文件,就成了关键一步。
为什么要用 tar 文件加载镜像?
比如公司内网服务器不允许访问公网,但开发同事给了一版新服务镜像。你没法直接 docker pull,只能通过离线方式传输。最常见的做法就是把镜像保存为 tar 包,通过 U 盘或内网传输后,在目标机器上加载使用。
如何加载 Docker 镜像的 tar 文件
Docker 提供了 docker load 命令来完成这个任务。操作非常简单,假设你已经拿到一个名为 myapp-v1.tar 的镜像包:
docker load < myapp-v1.tar
也可以写成:
docker load --input myapp-v1.tar
两种写法效果一样。执行后,Docker 会解压并注册镜像到本地仓库中。你可以通过 docker images 查看是否成功加载。
顺便复习:如何生成这个 tar 文件?
如果你也需要从现有镜像生成 tar 包,可以用 docker save。例如:
docker save -o myapp-v1.tar myapp:latest
这条命令会把名为 myapp:latest 的镜像保存为当前目录下的 myapp-v1.tar。支持同时打包多个镜像:
docker save -o all-images.tar redis:alpine nginx:stable mysql:5.7
常见问题注意点
加载时如果提示“no such file or directory”,先检查文件路径是否正确。建议进入 tar 所在目录再执行命令,避免路径错误。
另外,tar 文件可能比较大,传输过程中别忘了校验完整性。可以提前用 md5sum 或 sha256sum 计算指纹,确保没传坏。
还有一点容易忽略:镜像加载后不会自动启动容器。你需要根据原有配置,用 docker run 或 docker-compose 来部署服务。
小技巧:压缩节省空间
导出时可以配合 gzip 压缩,减小体积:
docker save myapp:latest | gzip > myapp-v1.tar.gz
对应地,加载时也要解压:
gunzip -c myapp-v1.tar.gz | docker load
或者用简写:
zcat myapp-v1.tar.gz | docker load
这种方式在传输大镜像时特别实用,能省下不少时间和带宽。