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

如何使用Axios调用Docker Daemon API获取容器列表?

解决Axios调用Docker Unix Socket API失败的问题

看起来你在尝试用Axios调用Docker的Unix Socket API时碰了壁,而原生http模块却能正常工作——这主要是因为Axios对Unix Socket的配置逻辑和原生http不同,再加上你代码里的一些多余引号拖了后腿。让我一步步帮你搞定:

先修正代码里的通用错误

不管是原生http还是Axios的代码,你都给字符串加了多余的嵌套双引号(比如socketPath: "\"/var/run/docker.sock\""),这其实是错误写法,正确的字符串应该直接写"/var/run/docker.sock",不需要额外转义引号。原生http模块可能侥幸能运行,但Axios对配置更严格,这会直接导致请求失败。

正确的Axios调用方式

方式一:通过httpAgent配置Unix Socket

Axios需要把socketPath配置在httpAgent实例里,而不是直接放在顶级配置项中。你需要引入Node.js的http模块创建Agent:

const axios = require('axios');
const http = require('http');

async function getDockerContainers() {
  try {
    const agent = new http.Agent({
      socketPath: '/var/run/docker.sock'
    });

    const axiosResult = await axios({
      url: '/containers/json',
      method: 'GET',
      httpAgent: agent
    });

    console.log(axiosResult.data);
    return axiosResult.data;
  } catch (error) {
    console.error('请求失败:', error.message);
    throw error;
  }
}

getDockerContainers();

方式二:使用Unix Socket URL格式

如果你想用URL的方式调用,需要遵循http://unix:/path/to/socket:/api/endpoint的格式(注意socket路径和API路径之间的冒号):

const axios = require('axios');

async function getDockerContainers() {
  try {
    const axiosResult = await axios.get('http://unix:/var/run/docker.sock:/containers/json');
    console.log(axiosResult.data);
    return axiosResult.data;
  } catch (error) {
    console.error('请求失败:', error.message);
    throw error;
  }
}

getDockerContainers();

额外注意事项

  • 确保你的容器已经正确挂载了/var/run/docker.sock:/var/run/docker.sock卷,否则即使代码正确也无法访问Docker API。
  • 如果Docker API需要指定版本号(比如v1.30),可以把API路径改成/v1.30/containers/json,对应到两种方式里就是修改url参数或者URL路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:55:14