温馨提示×

ubuntu docker为何卡顿

小樊
40
2026-09-13 08:52:23
栏目: 智能运维

Ubuntu 上运行 Docker 出现“卡顿”一般不是单一原因,常见可以从宿主机资源、Docker 配置、存储驱动、容器本身、内核/版本几个维度排查。下面按出现频率给你一个系统性的清单。


一、宿主机资源不足(最常见)

1. CPU 被吃满

top
htop
  • 某个容器 CPU 占用 100%
  • 宿主机本身负载高(compile、ML、挖矿等)

✅ 解决:

  • 限制容器 CPU:
docker run --cpus=1.5 ...
  • 找出异常容器:
docker stats

2. 内存不足 / 频繁 OOM

free -h
dmesg | grep -i oom
  • 内存不够 → swap → 卡死
  • 容器没限制内存,吃掉全部

✅ 解决:

docker run -m 2g --memory-swap=2g ...

3. 磁盘 IO 瓶颈

iostat -x 1
  • 机械硬盘
  • 日志疯狂写
  • 数据库在 Docker 里跑

✅ 解决:

  • 日志限制:
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
  • 数据库用 volume,不要放容器层

二、Docker 存储驱动问题(Ubuntu 特别常见)

1. 使用了 overlay 而不是 overlay2

docker info | grep Storage

✅ 推荐:

  • Ubuntu 20.04+:overlay2(默认)
  • 不要用 aufsdevicemapper

如果异常:

sudo nano /etc/docker/daemon.json
{
  "storage-driver": "overlay2"
}
sudo systemctl restart docker

三、WSL / 虚拟机场景(很多人忽略)

如果你是:

  • Windows + WSL2 + Ubuntu + Docker
  • 或 VMware / VirtualBox 里跑 Ubuntu

常见卡点:

  • WSL2 默认内存无限
  • 文件在 /mnt/c 下极慢

✅ 解决:

  • 项目放 Ubuntu 内部:
~/project

不是:

/mnt/c/project
  • 限制 WSL 内存:
# %USERPROFILE%\.wslconfig
[wsl2]
memory=4GB

四、Docker 守护进程问题

1. Docker 本身卡死

systemctl status docker
journalctl -u docker -f

2. 版本过旧

docker version

Ubuntu 自带 apt 的 Docker 经常旧。

✅ 建议用官方源:

https://docs.docker.com/engine/install/ubuntu/

五、容器数量 / 网络问题

  • 几百个容器
  • 自定义 bridge 网络复杂
  • DNS 解析慢

✅ 检查:

docker network ls
docker ps -a | wc -l

可尝试:

--dns 8.8.8.8

六、快速自检清单(30 秒)

docker stats
free -h
df -h
docker info | grep Storage
top

七、如果你愿意,我可以更精确帮你

你可以补充:

  1. 物理机 / 虚拟机 / WSL
  2. Docker 版本
  3. 卡在:启动慢 / 运行慢 / 命令行卡
  4. 跑的是什么(Web / DB / AI)

我可以直接给你针对性优化方案

0