温馨提示×

ubuntu docker为啥启动慢

小樊
40
2026-09-01 09:57:25
栏目: 智能运维

Ubuntu 下 Docker 启动慢(指 docker daemon 启动慢,或 容器启动慢)通常有几种常见原因。下面按场景给你梳理一下,方便对照排查。


一、Docker 守护进程(dockerd)启动慢

1. 使用了 overlay2 但后端存储慢

Ubuntu 默认用 overlay2,如果:

  • 系统在 机械硬盘 / 低性能云盘
  • /var/lib/docker网络存储(NFS、Ceph 慢盘)

都会导致 dockerd 启动和镜像加载慢。

✅ 检查:

docker info | grep -i storage
df -h /var/lib/docker

✅ 建议:

  • /var/lib/docker 挂到 SSD
  • 或单独挂载数据盘

2. 启动时在做磁盘清理 / 镜像校验

以下情况会明显变慢:

  • 上次非正常关机
  • Docker 版本升级
  • 容器/镜像非常多

dockerd 启动时会:

  • 扫描镜像层
  • 重建 overlay 元数据

✅ 解决:

docker system prune -a

(谨慎,会删未使用镜像)


3. 开启了不必要的安全/审计功能

Ubuntu 常见拖慢因素:

  • AppArmor
  • auditd
  • SELinux(较少见)

✅ 检查:

systemctl status apparmor
systemctl status auditd

✅ 可尝试(测试环境):

sudo systemctl stop apparmor

4. Docker 使用 cgroup v2 + systemd 初始化慢

Ubuntu 20.04+ 默认 cgroup v2,某些老内核或定制内核会导致:

  • dockerd 等待 cgroup 初始化
  • 容器启动卡住几秒

✅ 检查:

stat -fc %T /sys/fs/cgroup

✅ 解决(必要时):

  • 升级内核
  • 或内核启动参数加:
systemd.unified_cgroup_hierarchy=0

二、容器启动慢(不是 dockerd)

1. 容器在做 DNS 解析

最常见原因!

Docker 默认用 8.8.8.8,如果:

  • 网络不通
  • 防火墙拦截 DNS

容器启动会卡 5–30 秒。

✅ 解决:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "dns": ["223.5.5.5", "114.114.114.114"]
}
EOF
sudo systemctl restart docker

2. 容器镜像太大

Ubuntu 基础镜像 + apt 安装很多东西 → 启动慢

✅ 建议:

  • ubuntu:slim
  • debianalpine

3. 启动时执行重操作

比如:

  • 启数据库并初始化
  • 做迁移
  • 解压大文件

✅ 建议:

  • 放到 entrypoint 异步
  • 或提前构建好镜像

三、系统级原因

1. 内存 / swap 不足

dockerd 启动会吃内存,如果:

  • 内存小
  • swap 频繁

会非常慢。

✅ 检查:

free -h

2. systemd 本身启动顺序问题

Ubuntu 上 docker 依赖:

  • containerd
  • network

如果网络服务慢,docker 会等。

✅ 查看:

systemd-analyze blame | grep docker

四、快速自检清单(推荐你直接跑)

docker info
systemctl status docker
df -h /var/lib/docker
free -h

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • Docker 版本
  • docker 启动慢 还是 容器启动慢
  • 物理机 / 虚拟机 / 云服务器

我可以直接帮你定位到具体原因。

0