【问题标题】:Error: connect ENOENT /var/run/docker.sock when using node-docker-api错误:使用 node-docker-api 时连接 ENOENT /var/run/docker.sock
【发布时间】:2018-04-17 01:00:06
【问题描述】:

我一直在尝试从我的 Node.js 应用程序中调用 docker,为此我使用了 node-docker-api,如 npm 模块文档https://github.com/AgustinCB/docker-api 中所述。为了测试我是否能够从 Node.js 与 docker 交互,我正在运行文档中作为示例给出的一个小型示例应用程序。但我收到错误 { 错误:连接 ENOENT /var/run/docker.sock。完整的错误信息如下所示

dockerOperations.js:

'use strict';
const {Docker} = require('node-docker-api');
var Q = require('q');


var service = {}
service.runDockerCommand = runDockerCommand;
    function runDockerCommand() {
      console.log('inside runDockerCommand');
      var deferred = Q.defer();
      const docker = new Docker({ socketPath: '/var/run/docker.sock' });
      console.log(docker);

      docker.container.create({
        Image: 'ubuntu',
        name: 'test'
      })
        .then(container => container.start())
        .then(container => container.stop())
        .then(container => container.restart())
        .then(container => container.delete({ force: true }))
        .catch(error => console.log(error));

        return deferred.promise;
    }

错误

{ Error: connect ENOENT /var/run/docker.sock
at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1170:14)

errno: 'ENOENT', 代码:'ENOENT', 系统调用:'连接', 地址:'/var/run/docker.sock' }

【问题讨论】:

  • 您的主机上是否运行了 docker 服务?主机上是否存在/var/run/docker.sock?你的主机是什么操作系统?
  • @MikeGorski:这是一台 Windows 机器,docker 服务正在运行,但我找不到 /var/run/docker.sock ,有没有我可以查看的特定目录?
  • 根据这个docs.docker.com/docker-for-windows/faqs/…npipe:////./pipe/docker_engine
  • 因为是windows文件系统,所以没有/var/run/docker.sock这个路径,你需要把这个路径从docker映射到你的windows主机
  • @Algeriassic:我该怎么做?

标签: javascript node.js docker docker-api


【解决方案1】:

我刚刚遇到了同样的问题。为了解决它,您需要将主机的 docker 套接字挂载到容器的卷中。这应该允许您的脚本访问它以触发容器。我个人使用 Docker Compose,这里有一个我是怎么做的例子,见volumes行:

version: "3.1"
services:
    graphql:
        container_name: mobydq-graphql
        restart: always
        image: mobydq-graphql
        build:
            context: ./graphql
        volumes:
            - //var/run/docker.sock:/var/run/docker.sock
        env_file:
            - ./.env
        depends_on:
            - db
        networks:
            - network
        command:
            [some command...]

【讨论】:

    【解决方案2】:

    Windows 上的 Docker 不使用 unix 套接字。您必须通过 tcp 访问 docker 守护进程。尝试通过 tcp 连接到端口 2375。

    https://docs.docker.com/engine/reference/commandline/dockerd/#examples

    【讨论】:

    • 我将套接字路径修改为 'tcp://0.0.0.0:2375',我仍然遇到同样的错误。这是我修改的行: const docker = new Docker({ socketPath: 'tcp://0.0.0.0:2375' });
    猜你喜欢
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 2021-12-06
    • 2019-07-11
    • 2020-01-03
    相关资源
    最近更新 更多