离线Docker镜像包无网络住宅主机部署
一、你面临的问题
很多人买了一块旧电脑或低功耗主机想跑Docker,结果发现家里没有公网、或者公司内网严格限制外网访问。
Docker Hub访问不了,docker pull 直接报错。
本文帮你解决: 在有网电脑上提前拉取好所有需要的镜像,打包成文件,再传到无网络主机上导入,直接运行容器。
不需要任何联网,不需要代理,全程可离线完成。
二、准备工作:你需要这几样东西
- 一台能正常上网的电脑(Windows / macOS / Linux 都行,必须装好 Docker Desktop 或 Docker Engine)
- 一个 U 盘或移动硬盘(用来传输文件)
- 一台无网络的 Linux 主机(已经装好 Docker Engine,但无法访问外网)
- 目标系统的架构(x86_64 还是 arm64?导出时注意匹配,否则导入报错)
三、在有网电脑上导出镜像包
3.1 拉取需要的镜像
假设你要跑 Nginx,先在有网电脑上执行:
docker pull nginx:latest
3.2 导出为 tar 文件
使用 docker save 命令将镜像保存为压缩包:
docker save -o nginx.tar nginx:latest
你会得到一个 nginx.tar 文件,大小一般几十到几百 MB。
多镜像导出:一次导出多个:
docker save -o all-images.tar nginx:latest mysql:8.0 python:3.11
3.3 复制到 U 盘
把 .tar 文件拷到 U 盘里,并确保无网络主机能读取(比如插上 USB 口,挂载文件系统)。
四、在无网络主机上导入并运行
4.1 检查 Docker 是否正常
sudo docker version
如果出现版本信息说明 Docker 已安装,可以继续。
4.2 导入镜像包
将 U 盘挂载到某个目录(例如 /mnt/usb),然后执行导入:
sudo docker load -i /mnt/usb/nginx.tar
成功后你会看到类似 Loaded image: nginx:latest 的信息。
4.3 运行容器
sudo docker run -d --name my-nginx -p 80:80 nginx:latest
然后用浏览器访问这台主机的 IP(如 http://192.168.1.100),如果看到 Nginx 欢迎页,部署成功。
五、避坑指南与常见问题
5.1 架构不匹配
如果导入时提示 invalid image format 或运行时报 exec format error,很可能是镜像架构与主机 CPU 不一致。
解决办法:在有网电脑上用 docker pull 时指定架构,例如:
docker pull --platform linux/amd64 nginx:latest
然后重新导出。
5.2 空间不足
无网络主机往往是老机器,磁盘可能很小。
导入前先用 df -h 检查剩余空间,建议留出镜像大小两倍以上的空间(导入时会解压)。
5.3 文件损坏
U 盘传输过程中可能文件损坏。
建议在 U 盘上先执行 md5sum nginx.tar 记录校验值,到无网主机上再次计算对比,一致再导入。
5.4 Docker 本身也未安装
如果无网络主机连 Docker 都没装,需要先离线安装 Docker。
网上搜索“离线安装 Docker CentOS”或“Ubuntu 离线安装 Docker”,用 dpkg 或 rpm 手动安装 deb/rpm 包。
这部分内容较多,本文只讲镜像转移,不展开。
六、验证效果与最后提醒
- 执行
docker images应该能看到刚导入的镜像 - 执行
docker ps确认容器正在运行 - 用
curl http://localhost:80或浏览器访问端口,得到正常响应
一句话总结: 有网电脑上 docker pull → docker save,无网主机上 docker load → docker run,中间只靠一个 U 盘传输。
这套方法同样适用于公司内网、离线机房、老笔记本电脑等场景。
如果你在部署中遇到架构或文件校验问题,优先回看本文避坑部分。