You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Docker Stack Deploy部署容器后,Docker Inspect显示Memory与NanoCpus值为0的问题

解决Docker Swarm部署后容器资源预留显示为0的问题

这是个常见的误解——你用docker inspect查看容器时看到的Memory和NanoCpus字段,对应的是直接通过docker run命令启动容器时设置的容器级资源限制/预留,而Swarm模式下的资源配置是在服务级别生效的,不会直接映射到容器的这些字段里,所以显示0是正常现象,但这不代表你的资源预留没生效。

下面是验证和确认的具体步骤:

1. 确认服务级资源配置已正确应用

执行以下命令查看你的服务配置:

docker service inspect <your_service_name>

在输出的JSON结构中,找到Spec.TaskTemplate.Resources.Reservations节点,你应该能看到和配置文件中一致的Cpus和Memory值。如果这里能看到正确的数值,说明你的资源预留已经被Swarm正确识别,并且在调度容器时会优先选择满足资源条件的节点。

2. 查看容器实际资源使用情况

如果想确认容器的资源使用是否符合预期,使用docker stats命令更直观:

docker stats <container_name>

这个命令会实时展示容器的CPU使用率、内存占用量,以及节点分配给它的资源情况,能直接看到资源预留是否在实际运行中起作用。

3. 若需要容器层面的强制限制(可选)

如果你的场景需要在容器层面强制限制资源使用(比如避免容器占用过多节点资源),可以在配置里添加limits字段,与reservations同级:

deploy:
  mode: replicated
  replicas: 1
  resources:
    reservations:
      cpus: '0.25'
      memory: 512M
    limits:
      cpus: '0.5'  # 限制容器最多使用0.5核CPU
      memory: 1G   # 限制容器最多使用1GB内存
  restart_policy:
    condition: on-failure
    max_attempts: 3

添加后再用docker inspect查看容器,就能看到Memory和NanoCpus字段对应到limits的数值了。这里要注意:reservations是调度时的「预留保障」,确保节点有足够资源才会调度容器;而limits是运行时的「上限限制」,两者作用不同。

总结一下:只要docker service inspect里能看到正确的预留配置,你的资源设置就已经生效了,docker inspect显示0只是因为它不展示Swarm服务级的配置,完全不用担心~

内容的提问来源于stack exchange,提问作者philein-sophos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:51:42