Docker离线部署无网络:无网络环境Docker离
什么时候需要 Docker 离线部署无网络?
企业内网、政务云、金融机房等环境经常禁止服务器访问公网。
这时候你要安装 Docker 并运行容器,必须走离线方式——提前在一台有网的机器上准备好所有安装包和镜像,再搬到目标机器上。
本文围绕 Docker离线部署无网络 这个场景,从零开始讲清楚每一步,保证你跟着做就能跑起来。
准备阶段:两台机器都要做什么
你需要两台服务器:
- 有网机器(下载机):用来下载 Docker 安装包、镜像以及编译时可能需要的依赖(比如 containerd、runc)。
- 无网机器(目标机):最终安装和运行 Docker 的离线服务器。
在下载机上,先确认你的目标机的操作系统版本和架构(比如 CentOS 7 x86_64 或 Ubuntu 20.04 amd64)。
通过 cat /etc/os-release 或者 uname -m 就能查到。
版本不同,依赖包的下载路径也不同,一定要对号入座。
核心步骤一:下载 Docker 安装包和所有依赖
1. 在有网机器上下载 RPM/DEB 包
以 CentOS 7 为例:
# 创建一个临时目录
mkdir ~/docker-offline && cd ~/docker-offline
用 yumdownloader 下载 Docker 及其依赖(需要先安装 yum-utils)
yum install -y yum-utils
repoquery --requires --resolve docker-ce | xargs -I {} yumdownloader --destdir=. {}
如果你用的是 Ubuntu,换成 apt-get download 配合 apt-cache depends。
2. 导出常用镜像
镜像也必须离线带走。
先在下载机上拉取你需要的镜像:
docker pull nginx:latest
docker pull mysql:8.0然后保存为 tar 文件:
docker save -o nginx.tar nginx:latest
docker save -o mysql.tar mysql:8.0注意:同样架构的镜像才能跨机器使用。如果目标机是 ARM(如树莓派),下载机也要拉取对应的 ARM 版本。
核心步骤二:在无网机器上安装 Docker
把上一步下载好的所有 .rpm 或 .deb 文件以及镜像 tar 文件,通过 U 盘、scp 或内网文件服务器传到目标机的同一个目录。
安装命令(CentOS 7):
cd /path/to/your/packages
rpm -ivh *.rpm --nodeps # --nodeps 跳过依赖检查,因为我们已经下载了所有依赖如果提示文件冲突,可以加上 --replacepkgs 或 --replacefiles。
启动 Docker 服务
systemctl start docker
systemctl enable docker验证安装:
docker version看到 Client 和 Server 都有版本信息,说明安装成功。
核心步骤三:导入镜像并运行容器
加载镜像
docker load -i nginx.tar
docker load -i mysql.tar用 docker images 确认镜像已存在。
启动一个测试容器
docker run -d --name my-nginx -p 8080:80 nginx:latest然后用浏览器或 curl 测试:
curl http://localhost:8080如果返回 Welcome to nginx! 就说明 Docker离线部署无网络 完全成功了。
高频问题和避坑指南
1. 缺少 libseccomp 等基础库
离线安装时,系统可能缺乏底层库。解决方案:在下载机用 yumdownloader 额外下载 libseccomp、libcgroup 等,或者在目标机上先用本地 ISO 安装基础依赖。
2. dockerd 启动失败,报“iptables: No chain/target/match by that name”
这是缺少 iptables 或内核模块。可以执行 yum install iptables(如果目标机有本地源),或者关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld也可以修改 /etc/docker/daemon.json 添加 "iptables": false,但会影响网络隔离。
3. 容器运行后无法联网(内外隔离是正常的)
离线环境下容器本身就不能访问公网,但你仍然可以访问宿主机上的端口(比如上面用 8080 映射)。如果需要容器之间通信,确保 docker0 网络存在。
4. docker save 出来的镜像太大,怎么压缩?
可以用 gzip:
docker save nginx:latest | gzip > nginx.tar.gz在目标机上解压再 load:gunzip -c nginx.tar.gz | docker load
效果验证与建议
执行完以上步骤后,推荐做一次完整的功能检查:
docker ps查看正在运行的容器;docker logs my-nginx确认日志无异常;- 重启一次 Docker 服务(
systemctl restart docker)确认容器自动恢复; - 如果需要持久化数据,请在
docker run时挂载卷(-v)。
Docker离线部署无网络 其实不难,关键在于提前把系统版本、依赖列表、镜像架构都对上。
如果你在操作中遇到其他报错,优先检查下载的包是否完整、系统内核版本是否匹配。
以上步骤已经经过多次生产环境验证,跟着做就能解决问题。