使用docker sdk从Web应用程序向docker机器发送命令

时间:2017-08-15 17:56:35

标签: node.js docker docker-machine docker-api

我是Docker的新手,我很难理解如何使用它。

目前,我想知道尝试使用像Dockerode这样的SDK从javascript web应用程序的客户端脚本向我的计算机上的docker机器发送命令是否有意义。

我安装了Docker CE for Windows(17.06.0-ce)和Docker Toolbox,我使用docker终端在默认机器上运行了一个容器。现在我想知道我输入的命令是否可以使用NodeJS从Web应用程序发送。我尝试使用此代码:

import Docker from 'dockerode';

const docker = new Docker({host: 'myDefaultMachineHost'});

export function createLocalDb () {

    docker.pull('someImageFromDockerHub', function (err, stream) {
      if (err) console.log("Catch : " + err.toString());
          stream.pipe(process.stdout, {end: true});

      stream.on('end', function() {
        //run the container
      }).catch(function (err) {
            console.log("Catch : " + err.toString());
        });
    });
}

但这不起作用(stream.pipe抛出错误)。我是否误解了我应该使用dockerode的上下文?

感谢您的解释!

1 个答案:

答案 0 :(得分:0)

简而言之:您需要将代码更改为此const docker = new Docker({socketPath: '/var/run/docker.sock'});并在容器中添加docker套接字。

<强>理论值:

您的本地计算机中有docker socket。您应该在docker容器中添加此套接字。 volume是您的解决方案。

图像可视化此问题:

enter image description here

使用参数实施

对于Linux / Mac用户来说,这是一项简单的任务。他们可以做到

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

在Windows上,您需要运行

docker run -v //var/run/docker.sock:/var/run/docker.sock ...

question中的详细信息。

使用Dockerfile实现

此外,您可以添加到Dockerfile VOLUME指令。

在Linux / Mac上,它应该是这样的:

VOLUME /var/run/docker.sock /var/run/docker.sock

我不知道它将在Windows上使用谁,我使用Mac。