📦 第一步:获取离线安装包 (在外网 Win10 上操作)

你需要下载 Docker 的 .deb 离线安装包及其依赖库。

  1. 确定架构
    你的 Win10 和 Win Server 极大概率都是 x86_64 (amd64) 架构。

  2. 下载源选择
    不要只下载 docker.io,它依赖很多底层库(如 containerdrunc)。最稳妥的方法是下载 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 包安装,原因如下:

  1. 依赖地狱docker.io 在 Ubuntu 源里依赖 containerdpigziptables 等多个库。你需要去 Ubuntu 的归档仓库一个个找对应版本的 .deb 文件下载,如果版本号对不上,安装会报错。
  2. 版本滞后:Ubuntu 官方源里的 docker.io 版本通常比较旧(如你报错里显示的 20.10.x),而直接下载官方 Binary 包可以让你使用最新版(如 24.x),兼容性更好。
  3. 一致性:使用官方 Binary 包是 Docker 官方推荐的离线安装方式,配置出来的环境更“纯净”,没有发行版特定的修改。
  4. 看到报错 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
    EOF
    2. 启动 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 &

    (注意命令最后的 & 符号,表示在后台运行)

  5. 4. 验证安装最后,测试一下 Docker 是否能正常工作:
  6. 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 组

请依次执行以下步骤,即可解决权限问题:

  1. 将你的用户添加到 docker 组
    在终端执行以下命令:

    sudo usermod -aG docker $USER

    这条命令会将当前用户 ($USER) 添加到 docker 用户组中。

  2. 让权限更改立即生效
    执行以下命令刷新你的用户组信息,无需重启电脑:

    newgrp docker

    或者你也可以选择关闭当前终端窗口,重新打开一个新的窗口,效果是一样的。

  3. 再次测试
    现在,你可以再次运行测试命令,应该就可以正常执行了:

    docker run hello-world

📝 总结

是的,你需要下载离线包。

请按照以下清单准备你的内网部署包:

  1. Docker 离线包docker-24.0.7.tgz (外网下载)。
  2. OpenClaw 镜像openclaw-backup.tar (外网导出)。
  3. 部署脚本:上面提到的 docker.service 配置文件内容。

这样,你在内网 WSL2 里就能通过纯离线的方式,构建出一个和外网一模一样的 Docker 环境。

更多推荐