错误:使用node-docker-api时连接ENOENT /var/run/docker.sock

时间:2018-04-17 01:00:07

标签: javascript node.js docker docker-api

我一直试图从我的Node.js应用程序中调用docker,为此我使用了npm模块文档https://github.com/AgustinCB/docker-api中描述的node-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)

错误:' ENOENT',   代码:' ENOENT',   系统调用:' connect',   地址:' /var/run/docker.sock' }

2 个答案:

答案 0 :(得分: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...]

答案 1 :(得分:0)

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

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