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



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

码头工人操作.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 套接字挂载到容器的卷中。这应该允许脚本访问它以触发容器。我个人使用 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...]

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

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

这可以解决。( node-docker-api@1.1.22 (

const docker = new Docker({ socketPath: '//./pipe/docker_engine' })

(不是npipe:////./pipe/docker_engine(

相关内容

最新更新