Docker API:在网页中显示容器日志

时间:2014-03-23 17:24:02

标签: javascript json node.js api docker

我正在使用Appersonlabs https://github.com/appersonlabs/docker.io中的docker.io包在node.js中为docker Web客户端开发项目。为了构建完整的客户端,我想将容器日志流式传输到网页。这是我使用api的路线:

app.get('/containers/:id',function(req,res){
    console.log('INSPECT CONTAINER WITH ID '+req.params.id);
    docker.containers.inspect(req.params.id,function(err,infos){
      docker.containers.attach(req.params.id, {stream: true, stdout: true, stderr:false, tty:false}, function(err,stream) {
        console.log(stream);
        res.render('containers/show.ejs',{container: infos, name: name, stream: stream});
      });
    });
  });

但是当我在console.log中流时,我得到了一个包含大量输出信息的大型JSON文件。

根据码头工具的API,我应该如何处理(http://docs.docker.io/en/latest/reference/api/docker_remote_api_v1.10/#attach-to-a-container

实施

实现Attach协议的最简单方法如下:

读取8个字节

  • 根据第一个字节选择stdout或stderr
  • 从最后4个字节中提取帧大小
  • 读取提取的大小并将其输出到正确的输出
  • 转到第一步

问题:

我应该如何实现这一目标?我真的不知道如何开始。

注意:据我所知,我的http请求是正确的,这里是我从API获得的JSON响应示例:

method: 'POST',
    path: 'http://localhost:4243/v1.7/containers/8196569ecaaf2bbcf726189b60212676ad1351f6ff4df6ebe9deb4743b52e138/attach?stream=true&stdout=true&stderr=false&tty=false',
    _headers: [Object],

2 个答案:

答案 0 :(得分:1)

我认为您需要在附加选项中添加“logs:true”:

docker.containers.attach(containerId, {logs: true, stream: true, stdout: true, stderr: false, tty: false}, function(err, stream)

我刚试过它,它在docker 0.9.1上工作正常。

答案 1 :(得分:0)

如果您像我一样找到这篇文章,并希望获得一个基本的,有效的实施示例:https://gist.github.com/m451/1dfd41460b45ea17eb71