【问题标题】:Use a docker sdk to send commands to the docker machine from a web app使用 docker sdk 从 Web 应用程序向 docker 机器发送命令
【发布时间】:2017-08-15 17:56:34
【问题描述】:

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

感谢您的解释!

【问题讨论】:

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


    【解决方案1】:

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

    理论:

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

    这个问题的可视化图片:

    使用参数实现

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

    【讨论】:

      猜你喜欢
      • 2013-08-16
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多