内外网隔离环境在wsl-ubuntu安装docker
📦 第一步:获取离线安装包 (在外网 Win10 上操作)
你需要下载 Docker 的 .deb 离线安装包及其依赖库。
-
确定架构:
你的 Win10 和 Win Server 极大概率都是 x86_64 (amd64) 架构。 -
下载源选择:
不要只下载docker.io,它依赖很多底层库(如containerd,runc)。最稳妥的方法是下载 Docker 官方的一键安装包(Binary Tarball),而不是单独的.deb包,因为解决依赖关系在离线环境下非常痛苦。推荐下载地址(外网操作):
- 访问 Docker 官方 找到最新版本:https://download.docker.com/linux/static/stable/x86_64
- 找到最新的稳定版本(例如
v24.0.7)。 - 下载名为
docker-[版本号].tgz的文件。- 注意:不要下载
docker-desktop,也不要下载.deb,就下载.tgz。 - 直接下载链接示例(请替换为最新版):
https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz
- 注意:不要下载
🚀 第二步:内网安装步骤 (Win Server + WSL2)
将下载好的 docker-xx.xx.xx.tgz 拷贝到内网服务器,然后在 内网 WSL2 (Ubuntu) 终端中执行以下命令:
1. 解压并安装二进制文件
假设你的压缩包在 /mnt/d/ 目录下:
# 1. 解压到临时目录
tar zxvf /mnt/d/docker-24.0.7.tgz
# 2. 将二进制文件复制到系统路径
sudo cp docker/* /usr/bin/
2. 配置 Docker 服务 (Systemd)
为了让 Docker 开机自启并作为服务管理,你需要创建服务文件。
-
创建服务文件:
sudo nano /etc/systemd/system/docker.service -
粘贴以下内容(这是标准的 Docker 服务配置):
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service containerd.service Wants=network-online.target Requires=docker.socket containerd.service [Service] Type=notify ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target
3. 启动 Docker
# 1. 重新加载 systemd 配置
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
# 2. 启动 Docker 服务
sudo systemctl start docker
# 3. 设置开机自启
sudo systemctl enable docker
4. 验证安装
sudo docker --version
# 应该输出:Docker version 24.0.7, build ...
💡 为什么不用 apt install docker.io 的离线包?
虽然报错提示你可以用 sudo apt install docker.io,但我不推荐你去手动下载 .deb 包安装,原因如下:
- 依赖地狱:
docker.io在 Ubuntu 源里依赖containerd,pigz,iptables等多个库。你需要去 Ubuntu 的归档仓库一个个找对应版本的.deb文件下载,如果版本号对不上,安装会报错。 - 版本滞后:Ubuntu 官方源里的
docker.io版本通常比较旧(如你报错里显示的 20.10.x),而直接下载官方 Binary 包可以让你使用最新版(如 24.x),兼容性更好。 - 一致性:使用官方 Binary 包是 Docker 官方推荐的离线安装方式,配置出来的环境更“纯净”,没有发行版特定的修改。
-
看到报错
Unit containerd.service not found,说明 Docker 已经启动了一部分,但它依赖的核心组件containerd(容器运行时)没有启动或配置丢失。这是因为在 WSL2 中,默认安装 Docker 二进制文件后,往往不会自动注册
containerd的系统服务。请按照以下步骤手动配置并启动
containerd,然后就能正常启动 Docker 了:🛠️第三步: 手动注册
1. 创建 containerd 服务文件
我们需要手动告诉系统如何启动
containerd。请在终端中执行以下命令(直接复制整段执行):sudo tee /etc/systemd/system/containerd.service <<EOF [Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target local-fs.target [Service] ExecStartPre=-/sbin/modprobe overlay ExecStart=/usr/bin/containerd Type=notify Delegate=yes KillMode=process Restart=always RestartSec=5 LimitNPROC=infinity LimitCORE=infinity LimitNOFILE=infinity TasksMax=infinity OOMScoreAdjust=-999 [Install] WantedBy=multi-user.target EOF2. 启动 containerd 服务
服务文件创建好后,重新加载配置并启动它:
sudo systemctl daemon-reload sudo systemctl enable containerd sudo systemctl start containerd如果这里没有报错,说明 containerd 已经成功启动。
3. 再次启动 Docker
现在
containerd已经在运行了,Docker 就能找到它并正常启动:sudo service docker start如果依然报错,使用手动后台启动 (最稳妥)
如果 service 命令依然因为 systemd 问题报错,直接手动拉起 Docker 进程:sudo dockerd --host unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock &(注意命令最后的
&符号,表示在后台运行) -
4. 验证安装最后,测试一下 Docker 是否能正常工作:
-
sudo docker version如果能看到 Client 和 Server 的版本信息,说明修复成功!你现在可以继续之前的
docker pull操作了。
💡 补充:如果还是不行
如果启动
containerd后 Docker 依然报错,或者提示iptables相关错误,请记得执行我们之前提到的防火墙切换命令:sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy sudo service docker restart
第四步:将用户加入 Docker 组
请依次执行以下步骤,即可解决权限问题:
-
将你的用户添加到 docker 组
在终端执行以下命令:sudo usermod -aG docker $USER这条命令会将当前用户 (
$USER) 添加到docker用户组中。 -
让权限更改立即生效
执行以下命令刷新你的用户组信息,无需重启电脑:newgrp docker或者你也可以选择关闭当前终端窗口,重新打开一个新的窗口,效果是一样的。
-
再次测试
现在,你可以再次运行测试命令,应该就可以正常执行了:docker run hello-world
📝 总结
是的,你需要下载离线包。
请按照以下清单准备你的内网部署包:
- Docker 离线包:
docker-24.0.7.tgz(外网下载)。 - OpenClaw 镜像:
openclaw-backup.tar(外网导出)。 - 部署脚本:上面提到的
docker.service配置文件内容。
这样,你在内网 WSL2 里就能通过纯离线的方式,构建出一个和外网一模一样的 Docker 环境。
更多推荐
所有评论(0)