我是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的上下文?
感谢您的解释!
答案 0 :(得分:0)
简而言之:您需要将代码更改为此const docker = new Docker({socketPath: '/var/run/docker.sock'});
并在容器中添加docker套接字。
<强>理论值:强>
您的本地计算机中有docker socket。您应该在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。