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

我是Docker的新手,在理解如何使用它方面遇到一些困难。

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

我为Windows(17.06.0-ce)和Docker Toolbox安装了Docker CE,并且使用dockerterminal在默认机器上运行了一个容器。 现在我想知道我input的命令是否可以使用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的上下文吗?

感谢您的解释!

简而言之 :你需要改变你的代码到这个const docker = new Docker({socketPath: '/var/run/docker.sock'}); 并在您的容器内添加dockersockets。

理论:

您的本地计算机中有docker套接字。 你应该在Docker容器中添加这个套接字。 量是你的解决scheme。

这个问题的可视化图像:

在这里输入图像说明

用参数实现

这对于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实现

另外,你可以添加到你的Dockerfile VOLUME指令。

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

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

我不知道谁会在Windows上使用Mac。