Deepin 25 上安装 Docker CE 实战记录

Deepin 25 上安装 Docker CE 实战记录

适用环境 :Deepin 25(crimson,基于 Debian 12 bookworm)、原生 Linux、内核 6.18+、

国内网络(直连 registry-1.docker.io 超时)

本教程包含 :环境检测 → apt 源说明 → 官方仓库安装 → containerd-snapshotter 修复 →

镜像加速器 → 用户组配置 → 验证 → 与两份 Ubuntu 教程的差异说明

为什么需要新文档docs/ 中已有的两份教程(在Ubuntu26.04上安装Docker教程.md

Docker安装教程-Ubuntu26.04.md)都是 Ubuntu 26.04 + WSL2/原生 Linux 的流程,不能直接套用在

Deepin 25。本文档是 当前真实机器lihaozhe、Deepin 25、native kernel)上跑通过的版本。


目录

  1. 环境检测
  2. 可行性检查
  3. [Docker CE 安装](#Docker CE 安装)
  4. 用户组配置
  5. [镜像加速器与 snapshotter 修复](#镜像加速器与 snapshotter 修复)
  6. 验证
  7. 常见问题排查
  8. 常用命令速查
  9. [与两份 Ubuntu 教程的差异对照](#与两份 Ubuntu 教程的差异对照)

1. 环境检测

bash 复制代码
uname -a
cat /etc/os-release

本机实测:

复制代码
Linux lihaozhe 6.18.38-amd64-desktop-rolling #25.01.01.28 SMP PREEMPT_DYNAMIC ... x86_64 GNU/Linux

PRETTY_NAME="Deepin 25"
NAME="Deepin"
VERSION_CODENAME=crimson
ID=deepin
VERSION_ID="25"

关键依赖:

bash 复制代码
ps -p 1 -o comm=                 # 必须 = systemd(Deepin 用 systemd,非 SysV)
stat -fc %T /sys/fs/cgroup/      # 必须 = cgroup2fs
which iptables || which nft      # 至少有一个(Docker 网络依赖)
curl --version | head -1         # 添加 GPG 源时需要
id                                # 当前用户在 sudo 组
df -h /                           # 至少 5 GB 可用
free -h                           # 至少 1 GB 可用

本机实测:

复制代码
systemd
cgroup2fs
/usr/sbin/iptables
uid=1000(lhz) gid=1000(lhz) 组=1000(lhz),27(sudo),989(docker)

✅ Deepin 25 默认就是 systemd + cgroup v2 + 已装 iptables,不需要任何内核补丁或额外依赖


2. 可行性检查

2.1 apt 是否可用

bash 复制代码
sudo apt-get update

实测要点:

  • 主源 community-packages.deepin.com/beige/ crimson main commercial community
  • 其他源(Chrome、driver、appstore)正常命中
  • Docker 仓库(download.docker.com/linux/debian bookworm,详见下文)可被识别但未必已经存在 → 走 §3 配置

2.2 Docker 仓库选择

Deepin 25 的 VERSION_CODENAME=crimson 不是 Debian codename ,Docker 官方源只接受

Debian codename(bookworm/bullseye/...)。本机实测两者可用

仓库 URL 状态
Docker 官方 https://download.docker.com/linux/debian bookworm stable ✅ 200
阿里云镜像 https://mirrors.aliyun.com/docker-ce/linux/debian bookworm ✅ 200

本教程选用 Docker 官方 bookworm (无需 GPG 代理,国内直连 download.docker.com

可达),不走阿里云,避免国内源偶发的 404(参见 Ubuntu 教程 §Q5)。

实测确认:

bash 复制代码
curl -s -o /dev/null -w "%{http_code}\n" \
  https://download.docker.com/linux/debian/dists/bookworm/Release
# 200

3. Docker CE 安装

3.0 仓库与 GPG 已就绪(首次安装场景)

本机先前已经创建了 /etc/apt/sources.list.d/docker.list/etc/apt/keyrings/docker.gpg

内容如下(完整流程亦列在 3.1~3.3):

/etc/apt/sources.list.d/docker.list

复制代码
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable

/etc/apt/keyrings/docker.gpg:Docker 官方公钥(5:29.x 系列)。

3.1 完整一次性脚本(推荐)

bash 复制代码
# 1) 预装依赖(iptables 通常已自带,重复装无副作用)
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg iptables

# 2) 添加官方 GPG(modern keyring 方式,已不再用已废弃的 apt-key)
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 3) 写仓库源(Deepin 25 是基于 Debian 12 bookworm,所以用 bookworm 而非 crimson)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4) 装全家桶(容器运行时 + buildx + compose v2 插件)
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
                        docker-buildx-plugin docker-compose-plugin

# 5) 启动 + 开机自启
sudo systemctl enable --now docker
sudo systemctl enable --now containerd

3.2 验证版本

bash 复制代码
docker --version
docker compose version
containerd --version
sudo systemctl is-active docker

本机实测:

复制代码
Docker version 29.7.2, build a7dcaa6
Docker Compose version v5.5.0
containerd containerd v2.3.4 db8809540e1a7a9da5d518876894933ff55692ab
active

3.3 已安装软件包清单

复制代码
docker-ce              5:29.7.2-1~debian.12~bookworm   amd64
docker-ce-cli          5:29.7.2-1~debian.12~bookworm   amd64
containerd.io          2.3.4-1~debian.12~bookworm      amd64
docker-buildx-plugin   0.36.1-1~debian.12~bookworm     amd64
docker-compose-plugin  5.5.0-1~debian.12~bookworm      amd64

4. 用户组配置

bash 复制代码
sudo usermod -aG docker $USER
id $USER | tr ',' '\n' | grep docker     # 应出现 (docker) 或 989(docker)

本机实测:

复制代码
uid=1000(lhz) gid=1000(lhz) 组=1000(lhz),27(sudo),989(docker)

⚠️ 组成员关系在 新登录会话 才生效。当前 shell 立即生效有两种方法:

bash 复制代码
# 方法 A:在当前 shell 内 newgrp(fork 子 shell,会话结束就消失)
newgrp docker

# 方法 B:登出再登入(Deepin UI 注销或 Ctrl+Alt+F1 重登录)
exit   # 然后重新进入桌面会话

5. 镜像加速器与 snapshotter 修复

5.1 必踩的坑:containerd-snapshotter

Docker 29.x 默认启用 containerd snapshotter,会让:

  • daemon.jsonregistry-mirrors 失效
  • docker pull 直接回落 registry-1.docker.io 然后超时
  • docker info 显示 Storage Driver: overlayfs + driver-type: io.containerd.snapshotter.v1

本机首次 pull hello-world 实测:

复制代码
Error response from daemon: failed to resolve reference "docker.io/library/hello-world:latest":
failed to do request: Head "https://registry-1.docker.io/v2/...": dial tcp 69.171.224.40:443: i/o timeout

解决:显式关闭 snapshotter,回经典 overlay2。

5.2 写入 daemon.json

先写到 /tmp/daemon.json(避免 <<EOF heredoc 与 sudo -S 抢 stdin),再 mv 过去:

bash 复制代码
cat > /tmp/daemon.json <<'EOF'
{
  "features": {
    "containerd-snapshotter": false
  },
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF

sudo mv /tmp/daemon.json /etc/docker/daemon.json
sudo chmod 644 /etc/docker/daemon.json
sudo cat /etc/docker/daemon.json   # 验证

💡 三个镜像加速器 都是国内可用的公益源,按响应速度从快到慢排序(2026-09-02 实测):

排序 镜像 平均 TTFB
1️⃣ https://docker.m.daocloud.io ~132 ms(阿里云,国内链路最短)
2️⃣ https://docker.1ms.run ~185 ms
3️⃣ https://docker.xuanyuan.me ~798 ms(Cloudflare,TLS 握手较慢)

Docker 会按列表顺序轮询镜像,第一个不可用时降级到下一个。把最快的放前面,能减少首次 pull 的等待时间。

5.3 强制重启

systemctl restart docker 在某些场景不会真正杀掉 dockerd,必须 kill -9

bash 复制代码
sudo systemctl stop docker containerd
sudo killall -9 dockerd containerd 2>/dev/null
sleep 3
sudo systemctl start containerd
sudo systemctl start docker
sleep 4

5.4 验证生效

bash 复制代码
sudo docker info | grep -A 2 "Storage Driver"
sudo docker info | grep -A 4 "Registry Mirrors:"

本机实测:

复制代码
 Storage Driver: overlay2
 Registry Mirrors:
  https://docker.m.daocloud.io/
  https://docker.1ms.run/
  https://docker.xuanyuan.me/

Storage Driver: overlay2(不再是 overlayfs + containerd snapshotter)。


6. 验证

6.1 hello-world 端到端

bash 复制代码
sudo docker pull hello-world
sudo docker run --rm hello-world

预期结尾输出:

复制代码
Hello from Docker!
This message shows that your installation appears to be working correctly.

本机实测:Status: Downloaded newer image for hello-world:latest + Hello from Docker! ...

6.2 免 sudo 验证(已加 docker 组后)

bash 复制代码
newgrp docker -c 'docker ps && docker compose version && docker info | grep "Storage Driver"'

本机实测:

复制代码
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
Docker Compose version v5.5.0
 Storage Driver: overlay2

✅ 全部走普通用户身份完成,未使用 sudo

6.3 compose 插件烟雾测试

bash 复制代码
mkdir -p /tmp/test-compose && cd /tmp/test-compose
cat > docker-compose.yml <<'EOF'
services:
  hello:
    image: hello-world
EOF
docker compose up

预期:容器启动并打印 Hello from Docker!,退出码 0。


7. 常见问题排查

Q1:pull 镜像一直超时,但 ping 8.8.8.8 正常

症状

复制代码
failed to do request: Head "https://registry-1.docker.io/v2/...": dial tcp ...:443: i/o timeout
warning msg="Host doesn't match" cfgHost=registry-1.docker.io host=<mirror>

原因 :Docker 29 默认 containerd snapshotter 模式使 registry-mirrors 失效。

解决 :参见 §5.2 关闭 snapshotter 并强制重启。

Q2:sudo systemctl restart docker 后配置未生效

原因 :systemd 的 Restart= 配置有时不会真正杀掉 dockerd 进程。

解决sudo killall -9 dockerd containerd 后再 systemctl start

Q3:docker composecommand not found

原因 :未安装 docker-compose-plugin(注意是 plugin 不是 docker-compose 单独二进制)。

解决sudo apt-get install docker-compose-plugin。新命令格式是 docker compose(带空格)。

Q4:用户加入 docker 组后仍需 sudo

原因 :组成员关系只在 新登录会话 生效。

解决

  • 当前 shell:newgrp docker
  • 完全退出再登录:注销 Deepin 桌面会话后重新进入

Q5:sudo apt-get updateRelease 404(典型:源地址错误)

症状404 Not Found [IP: ...]

原因 :Deepin VERSION_CODENAME=crimson 不是 Debian codename,Docker 源必须写 bookworm

(Deepin 25 基于 Debian 12)。

解决/etc/apt/sources.list.d/docker.list 必须写 bookworm

复制代码
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable

Q6:能否让多个用户共享 docker?

bash 复制代码
sudo usermod -aG docker user1
sudo usermod -aG docker user2
# 这些用户重新登录后均可免 sudo 使用 docker

Q7:能否保留对单台机器的 sudo docker 习惯(不加入 docker 组)?

可以,不做任何用户组配置也能正常用 sudo docker ...

只是每次都要 sudo。本教程加入 docker 组是为了日常开发更顺手。


8. 常用命令速查

8.1 服务管理

bash 复制代码
sudo systemctl status docker             # 查看状态
sudo systemctl start docker              # 启动
sudo systemctl stop docker               # 停止
sudo systemctl restart docker            # 重启(不可靠,用 killall)
sudo killall -9 dockerd containerd       # 强制结束
sudo journalctl -u docker -f             # 实时日志
sudo journalctl -u docker --since "1h ago"   # 最近 1h 日志

8.2 镜像操作

bash 复制代码
docker images                              # 列出本地镜像
docker search nginx                        # 搜索(需镜像源支持 search)
docker pull nginx:1.27                     # 拉取
docker rmi nginx:1.27                      # 删除
docker image prune -a                      # 清理未使用镜像
docker tag nginx:1.27 mynginx:v1           # 打标签
docker save mynginx:v1 -o mynginx.tar      # 导出
docker load -i mynginx.tar                 # 导入

8.3 容器操作

bash 复制代码
docker ps -a                                # 列出所有容器(含停止)
docker run -d --name web -p 80:80 nginx:1.27 # 后台启动
docker logs -f --tail 100 web               # 实时日志
docker exec -it web bash                    # 进入容器
docker stop web                             # 停止
docker start web                            # 启动
docker restart web                          # 重启
docker rm -f web                            # 强制删除
docker top web                              # 查看容器内进程
docker stats web                            # 实时资源占用
docker inspect web                          # 元数据 JSON

8.4 docker compose(v2 插件)

bash 复制代码
docker compose up -d                         # 后台启动
docker compose down                          # 停止并删容器
docker compose ps                            # 查看状态
docker compose logs -f                       # 实时日志
docker compose pull                          # 拉所有镜像
docker compose exec web bash                 # 进入服务
docker compose config                        # 校验 compose.yml
docker compose build                         # 构建镜像

8.5 网络与卷

bash 复制代码
docker network ls                          # 网络列表
docker network create mynet                # 自定义网络
docker network inspect bridge              # 详情
docker volume ls                           # 卷列表
docker volume create mydata                # 创建卷
docker system df                           # 磁盘占用
docker system prune -a                     # 清理所有未用资源

8.6 上下文与 Buildx

bash 复制代码
docker context ls                          # 列出当前可用的 docker daemon(本地/远程)
docker buildx ls                           # 列出 builder 实例
docker buildx build -t myapp:latest .      # buildx 构建(多平台能力更强)

9. 与两份 Ubuntu 教程的差异对照

项目 在Ubuntu26.04上安装Docker教程.md Docker安装教程-Ubuntu26.04.md 本文(Deepin 25)
目标 OS Ubuntu 26.04 LTS (resolute) + WSL2 Ubuntu 26.04 LTS (resolute) 原生 Linux Deepin 25 (crimson) 原生 Linux
VERSION_CODENAME 用法 直接套 Ubuntu 的 resolute 直接套 Ubuntu 的 resolute bookworm(Deepin 是 Debian 12 衍生)
源 URL 路径 /linux/ubuntu /linux/ubuntu /linux/debian
<<EOF + sudo -S 能否写入 daemon.json ✅(PTY 中能用) ✅(PTY 中能用) ⚠️ 会冲突导致密码错 ,改用 /tmp 中转
systemd 检查 包含 WSL2 特定检查 简化为 PS PID 1 Deepin 默认就是 systemd,无需检测
AppArmor 默认未启 默认未启 Deepin 安装包会自动启用 apparmor service
防火墙后端 nftables(Ubuntu 26 默认) nftables iptables(Docker info 显示)
containerd-snapshotter 修复
镜像加速器三个源 相同 相同 相同
用户免 sudo

附录 A:本机实测环境快照

text 复制代码
OS:           Deepin 25 (crimson)
Base on:      Debian 12 (bookworm)
Kernel:       6.18.38-amd64-desktop-rolling (native)
CPU:          本机 lihaozhe 自用机
systemd:      PID 1 = systemd ✓
cgroup:       v2 (cgroup2fs) ✓
iptables:     /usr/sbin/iptables ✓
Docker:       29.7.2 (build a7dcaa6)
Compose:      v5.5.0
containerd:   2.3.4
runc:         (随 docker-ce 一起)
Storage:      overlay2(containerd-snapshotter=false)✓
Registry Mirrors: docker.m.daocloud.io, docker.1ms.run, docker.xuanyuan.me(按速度排序)✓
User:         lhz (uid=1000, groups: lhz+sudo+docker) ✓

附录 B:最终配置文件

/etc/apt/sources.list.d/docker.list

复制代码
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable

/etc/docker/daemon.json

json 复制代码
{
  "features": {
    "containerd-snapshotter": false
  },
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}

实测时间 :2026-09-02

作者 :基于本机实测整理(Deepin 25 实战)

License:自由使用与转载

相关推荐
pingglala1 小时前
ubuntu-nat模式不能上网解决方法
linux·运维·ubuntu
一技安身1 小时前
【信创】外网aarch64终端安装deepseek Ragflow 迁移至内网银河麒麟服务器
运维·服务器
考虑考虑2 小时前
ElasticSearch索引命令
运维·后端·elasticsearch
重生之我来学Python3 小时前
Docker套装的简介、安装、超级详细教程
linux·docker·容器·eureka·github
和裕3 小时前
光伏储能定制加强型瓦楞纸箱:降低组件运输隐裂率与售后损耗的核心价值
大数据·运维·网络·人工智能·算法
智购科技无人售货机工厂店4 小时前
2026自动售货机大屏交互设计原则:从信息层级到视觉动线的工程实践~YH
运维·python·单片机·嵌入式硬件·自动化·交互
Ruiery4 小时前
Linux 6.6内核 PCIe 深度解析(十):PCIe Port Driver(portdrv)— 一个物理 Port,拆出五个逻辑服务
linux·运维·服务器
运维行者_5 小时前
ISP 企业级带宽计费怎么做?网络流量计费的 6 大核心能力
运维·服务器·网络·数据库·支持向量机·接口隔离原则
数安旭说5 小时前
企业终端行为审计建设:本地审计 + 网络审计构建完整溯源取证体系
运维·数据安全·软件需求·溯源·审计·网络审计