0

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

现在,我想知道尝试使用 Dockerode 之类的 SDK 从 javascript Web 应用程序的客户端脚本向我计算机上的 docker 机器发送命令是否有意义。

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

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 的上下文?

感谢您的解释!

4

1 回答 1

0

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

理论:

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

可视化此问题的图像:

在此处输入图像描述

带参数的实现

这是 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 ...

这个问题的更多细节。

使用 Dockerfile 实现

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

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

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

我不知道在 Windows 上会是谁,我用的是 Mac。

于 2017-08-15T18:32:44.793 回答