上篇讲了安装、配置和网络。下篇我们把生产环境中最容易“出事故”的四块讲透:
磁盘暴涨、权限错乱、资源失控、日志爆盘


一、磁盘为什么总是被 Docker 吃满?

很多同学第一次看到 Docker 占几百 GB 都会懵。先看整体占用:

docker system df

典型元凶有 3 个:

  1. 停止容器长期未清理
  2. 悬空镜像越积越多
  3. 容器 json 日志无限增长

查看日志文件体积:

sudo du -sh /var/lib/docker/containers/*/*-json.log

清理建议(按风险从低到高):

docker container prune -f
docker image prune -a -f
docker volume prune -f
# 慎用:会删未使用镜像/容器/网络/卷
docker system prune -a --volumes -f

二、存储驱动选错,性能直接掉档

如果你还在用 devicemapper,启动慢、IO 高是常态。
大多数现代 Linux 环境建议用 overlay2

检查当前驱动:

docker info | grep "Storage Driver"

切换前请先备份数据。注意:切换驱动通常意味着镜像和容器需要重建或迁移。

推荐配置:

{
  "storage-driver": "overlay2"
}

三、权限问题:为什么不用 sudo 就报错?

报错类似:

permission denied while trying to connect to the Docker daemon socket

处理步骤:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

如果仍不生效,重新登录会话。

安全提醒:docker 组权限接近 root,生产环境请控制成员范围。


四、挂载目录后文件全是 root,怎么解?

场景:容器内写文件,宿主机普通用户无权限改。

推荐在运行时指定 UID/GID:

docker run -u $(id -u):$(id -g) -v /home/user/data:/data ubuntu touch /data/test.txt

如果是团队项目,建议在 Dockerfile 中创建业务用户并固定身份运行。


五、资源失控:一个容器拖垮整台机

Docker 默认不限制容器资源,必须显式加限制。

# 内存限制
docker run -m 512m --memory-swap 1g nginx

# CPU限制
docker run --cpus="1.5" nginx

docker-compose 中也要加资源约束(尤其是生产环境),避免单点容器内存泄漏导致主机雪崩。


六、日志治理:不做轮转,迟早爆盘

最实用方案是全局限制日志大小:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3",
    "compress": "true"
  }
}

常用查看命令:

# 看最后100行
docker logs --tail 100 <container>

# 实时追踪
docker logs -f <container>

# 按时间段
docker logs --since "2026-03-01T10:00:00" --until "2026-03-01T12:00:00" <container>

七、生产可用 daemon.json 参考模板

{
  "registry-mirrors": [
    "https://docker.rainbond.cc",
    "https://docker.1ms.run",
    "https://docker.m.daocloud.io"
  ],
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3",
    "compress": "true"
  },
  "live-restore": true,
  "userland-proxy": false,
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 5,
  "dns": ["223.5.5.5", "8.8.8.8"]
}

配置修改后别忘了:

sudo dockerd --validate --config-file=/etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker

八、总结

  • 磁盘问题先看 docker system df
  • 生产优先 overlay2
  • 权限问题本质是 socket 与用户组
  • 所有生产容器必须加 CPU/内存限制
  • 日志轮转一定要在全局配置里做
  • 清理策略要常态化(配 cron)

更多详细内容

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐