温馨提示×

ubuntu docker为何启动慢

小樊
39
2026-09-16 12:23:31
栏目: 智能运维

在 Ubuntu 上 Docker 启动慢(无论是 Docker 服务启动慢,还是容器启动慢)通常由以下几类原因导致。下面按「Docker 服务启动慢」和「容器启动慢」分别说明,并给出排查与优化方法。


一、Docker 服务本身启动慢(systemctl start docker 慢)

1. 存储驱动问题(最常见)

Ubuntu 默认可能使用 overlay2,但如果配置错误或使用 devicemapperaufs 会非常慢。

检查:

docker info | grep Storage

建议:

  • 使用 overlay2
  • 使用 ext4 / xfs 文件系统
  • 避免使用 NFS、网络盘作为 Docker 根目录

优化:

# /etc/docker/daemon.json
{
  "storage-driver": "overlay2"
}

2. Docker 数据目录在慢磁盘 / 网络盘

默认路径:

/var/lib/docker

如果它在:

  • NFS
  • 云盘
  • 机械硬盘
  • 加密文件系统

都会显著变慢。

解决:

  • 迁移到 SSD
  • 或修改 daemon.json:
{
  "data-root": "/ssd/docker"
}

3. 防火墙 / iptables 初始化慢

Docker 启动会重建 iptables 规则。

可能原因:

  • ufw + Docker 冲突
  • nftablesiptables 混用
  • 规则过多

排查:

systemd-analyze blame
journalctl -u docker

4. DNS 配置问题

Docker 启动时会检测 DNS。

如果 /etc/resolv.conf 指向不可达 DNS:

  • Docker 启动会卡住或超时

解决:

{
  "dns": ["8.8.8.8", "1.1.1.1"]
}

5. cgroup / 内核问题

Ubuntu 使用 systemd cgroup driver 更优。

检查:

docker info | grep Cgroup

推荐:

{
  "exec-opts": ["native.cgroupdriver=systemd"]
}

二、容器启动慢(docker run 慢)

1. 镜像过大

  • 几 GB 的镜像
  • 未使用多阶段构建

解决:

  • 使用 alpine
  • 多阶段构建
  • 清理缓存

2. 容器做了重初始化

例如:

  • 每次启动跑数据库初始化
  • 启动脚本 sleep
  • 健康检查阻塞

3. 挂载了慢目录

例如:

-v /nfs/data:/data

容器启动时要挂载、检查权限,会卡。


4. 启动时需要拉取镜像

如果镜像不在本地:

docker run xxx

会先 pull,非常慢。


5. 系统资源不足

  • 内存不足
  • CPU 被占满
  • inode 耗尽

检查:

free -h
df -i
top

三、快速排查清单(建议你做)

# 看 docker 启动耗时
systemd-analyze blame | grep docker

# 看 docker 日志
journalctl -u docker -b

# 看 docker 信息
docker info

# 看磁盘
df -h /var/lib/docker

四、典型“Ubuntu + Docker 慢”的真实案例

  • Docker 装在 WSL2 + Windows 磁盘 → 极慢
  • /var/lib/dockerNFS → 启动 1–2 分钟
  • 使用 devicemapper → 容器启动 10s+
  • DNS 不可达 → dockerd 启动卡 30s

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

  1. docker 服务启动慢 还是 容器启动慢
  2. Ubuntu 版本
  3. 是否云服务器 / WSL / 虚拟机
  4. docker info 输出(可脱敏)

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

0