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

Docker容器运行正常但API返回空,NodeJS监控面板无法获取容器信息

解决Docker API返回空容器列表的问题

可能的原因及修复步骤

  1. 核对Docker API版本兼容性
    Docker CLI与API的版本必须匹配。先通过以下命令获取当前Docker守护进程的API版本:
docker version --format '{{.Server.APIVersion}}'

将curl命令中的API版本号替换为上述结果,例如若版本为1.44,则执行:

curl --unix-socket /var/run/docker.sock -X GET http://localhost/v1.44/containers/json

版本不匹配会直接导致返回空结果或报错。

  1. 确认Docker守护进程一致性
    若服务器上存在多个Docker守护进程(比如同时安装了Docker Desktop和系统原生Docker),需验证CLI与API连接的是否为同一实例:
    先查看CLI连接的守护进程根目录:
docker info --format '{{.DockerRootDir}}'

再通过API查询对应路径:

curl --unix-socket /var/run/docker.sock -X GET http://localhost/v1.xx/info | grep DockerRootDir

若路径不一致,说明API连接的是另一个守护进程,需调整socket路径或切换Docker上下文。

  1. 检查API请求参数
    默认情况下/containers/json仅返回运行中的容器,若仍无结果,可添加参数获取所有容器(含停止状态):
curl --unix-socket /var/run/docker.sock -X GET "http://localhost/v1.xx/containers/json?all=1"

也可通过过滤器精准筛选运行中容器:

curl --unix-socket /var/run/docker.sock -X GET "http://localhost/v1.xx/containers/json?filters={\"status\":[\"running\"]}"
  1. 修正Docker Socket权限(安全方式)
    不建议直接设置sock文件为777,正确做法是将当前用户加入docker组:
sudo usermod -aG docker $USER

执行newgrp docker刷新组权限,之后无需root即可正常调用API。

  1. 调整Dockerode库配置
    使用dockerode时,避免硬写API版本,让库自动协商匹配版本,并确保socket路径正确:
const Docker = require('dockerode');
const docker = new Docker({ socketPath: '/var/run/docker.sock' });

// 先确认API版本再请求容器列表
docker.info((err, info) => {
  if (err) throw err;
  docker.listContainers({ all: true }, (err, containers) => {
    if (err) throw err;
    console.log('容器列表:', containers);
  });
});

内容的提问来源于stack exchange,提问作者dartmoordunbar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:42:45