Docker Compose 启动的容器内存 监控

要查看由 Docker Compose 启动的容器内存占用,最直接和常用的方法是使用 docker stats 命令。由于 Docker Compose 启动的容器在本质上与普通 Docker 容器无异,只是其名称通常带有项目和服务的前缀(例如 myproject-web-1),因此通用的 Docker 命令完全适用。

💡 核心命令:docker stats

这个命令可以实时监控一个或多个正在运行的容器的资源使用情况,包括内存、CPU、网络和磁盘 I/O。

1. 查看所有容器的实时状态

直接运行 docker stats 会持续输出所有运行中容器的资源数据。

bash 复制代码
docker stats
2. 查看指定容器的状态

如果你只想关注特定服务,可以指定容器名称或 ID。容器名称通常可以在 docker-compose.yml 文件所在目录下通过 docker-compose ps 命令查看。

bash 复制代码
docker stats <容器名称或ID>

例如,如果你的项目名为 myapp,服务名为 web,可以这样查看:

bash 复制代码
docker stats myapp-web-1
3. 一次性输出,不持续刷新

使用 --no-stream 选项可以让命令只打印一次当前的资源使用情况,然后退出,这在编写脚本时非常有用。

bash 复制代码
docker stats --no-stream <容器名称或ID>
4. 结合 docker-compose ps 进行过滤

你可以结合 docker-compose 命令和一些 shell 技巧来只监控当前项目下的所有容器。

bash 复制代码
# 先获取当前 compose 项目所有容器的 ID,然后传给 docker stats
docker stats $(docker-compose ps -q)

⚙️ 在 docker-compose.yml 中设置内存限制

为了防止某个容器无限制地占用内存,影响其他服务,你可以在 docker-compose.yml 文件中为服务设置内存限制。这样,docker stats 输出中的 LIMIT 列就会显示你设定的值。

yaml 复制代码
version: '3.8'
services:
  web:
    image: nginx
    deploy:
      resources:
        limits:
          # 限制最大内存为 512MB
          memory: 512M
        reservations:
          # 预留最小内存为 128MB
          memory: 128M

请注意deploy.resources 选项在使用 docker-compose 命令时,需要 Docker Swarm 模式才能生效。如果你是在单机上使用 docker-compose up,更推荐使用顶级的 mem_limit 选项:

yaml 复制代码
version: '3.8'
services:
  web:
    image: nginx
    # 限制最大内存为 512MB
    mem_limit: 512m

📊 docker stats 输出信息解读

执行 docker stats 命令后,你会看到类似如下的输出,这里对关键的内存指标进行解释:

列名 含义说明
MEM USAGE / LIMIT 内存使用量 / 内存限制 。这是最关键的指标,显示了容器当前使用的内存量以及其最大可用的内存量(例如 100MiB / 2GiB)。
MEM % 内存使用百分比 。即 MEM USAGELIMIT 的百分比。
NET I/O 网络 I/O。显示容器通过网络发送和接收的数据量。
BLOCK I/O 磁盘 I/O。显示容器对磁盘读取和写入的数据量。
相关推荐
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy4 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭4 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩5 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵6 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1116 天前
LM Studio Docker 部署——本地大模型一键启动
docker
曲幽7 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
武子康9 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
Alsn8612 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
JLWcai2025100912 天前
铸造领域树脂砂轮|金利威多场景解决方案,20 + 配方覆盖全需求
mongodb·zookeeper·eureka·spark·rabbitmq·memcached·storm