温馨提示×

ubuntu docker为何占内存高

小樊
37
2026-10-04 08:50:40
栏目: 智能运维

在 Ubuntu 上使用 Docker 时,如果发现内存占用很高,通常不是 Docker 本身“吃内存”,而是容器、镜像、缓存或配置问题导致的。下面按常见原因逐一说明,并给出排查与优化方法。


一、最常见原因

1️⃣ 容器里的进程本身占用内存

Docker 只是运行进程,内存主要来自:

  • Java / Python / Node / MySQL / Redis 等应用
  • 未限制内存的容器

排查:

docker stats

查看每个容器的:

  • MEM USAGE / LIMIT
  • % MEM

解决: 给容器限制内存

docker run -m 512m --memory-swap=512m myimage

2️⃣ 大量容器在运行(尤其是闲置容器)

很多 docker-compose 项目会启动:

  • db
  • redis
  • nginx
  • worker
  • adminer

排查:

docker ps -a

解决:

  • 停止不用的容器
docker stop <id>
  • 删除无用容器
docker rm <id>

3️⃣ 镜像和构建缓存堆积

Docker 不会自动清理:

  • 旧镜像
  • 构建缓存
  • 悬空镜像(dangling)

排查:

docker images
docker system df

解决:

docker image prune
docker container prune
docker volume prune
docker system prune -a

4️⃣ Docker 默认不限制资源(Ubuntu 常见)

Docker 在 Linux 上:

  • 默认 不限制内存
  • 容器可吃光宿主机内存

解决:

  • 全局限制(docker daemon) 编辑 /etc/docker/daemon.json
{
  "default-shm-size": "128m"
}

或给每个容器加 -m


5️⃣ overlay2 文件系统缓存

Ubuntu 默认使用 overlay2

  • 镜像层缓存
  • 容器写层

即使容器停了,写层仍在

排查:

du -sh /var/lib/docker

解决:

  • 定期清理
  • 不要随便 docker commit

二、Ubuntu 特有情况

6️⃣ snap 安装的 Docker(不推荐)

Ubuntu 有时默认装的是 snap docker

  • 隔离更重
  • 资源统计混乱

检查:

which docker
snap list | grep docker

建议: 使用官方 apt 安装 Docker


7️⃣ cgroup v2 + 老内核问题

Ubuntu 22.04+ 默认 cgroup v2

  • 老应用可能内存统计异常

检查:

stat -fc %T /sys/fs/cgroup

三、快速自查清单 ✅

# 1. 看谁最占内存
docker stats

# 2. 看磁盘和镜像占用
docker system df

# 3. 看容器数量
docker ps -a | wc -l

# 4. 看 docker 目录大小
du -sh /var/lib/docker

四、典型“正常但看起来高”的情况

  • 8G 内存,docker 用 3–4G ✅ 正常
  • Java 容器默认吃 1/4 物理内存 ✅ 正常
  • Redis 没限制 ✅ 正常

如果你愿意,可以贴一下:

  • docker stats
  • docker system df
  • 宿主机内存大小

我可以直接帮你判断是正常还是异常。

0 踩