【问题标题】:How to directly pass the content of dockerfile as a string to dokerode instead of passing the path of the file如何直接将dockerfile的内容作为字符串传递给dokerode,而不是传递文件的路径
【发布时间】:2019-12-11 05:47:42
【问题描述】:

dockerode api 需要使用以下参数调用才能从dockerfile 构建图像

例如:

docker.buildImage({
  context: __dirname,
  src: ['Dockerfile']
}, {
  t: 'myDockerImage'
}, function(error, output) {
  if (error) {
    console.error(error);
  }
  output.pipe(process.stdout);
});

其中context 表示 dockerfile 所在的目录,src 将包含用于创建 tarball 和生成 dockerimage 的文件,t 表示 dockerimage 的标记名。

但是,在我的情况下,我想跳过映射目录和 dockerfile 的名称,以便 dockerode 从中读取和创建图像,或者,换句话说,我想跳过进入 dockerode 的文件读取操作,而是直接将 dockerfile 的内容作为字符串提供。

所以,如果 dockerfile 包含这样的内容

FROM alpine

我想将该字符串直接传递给 dockeode 以构建映像,而不是将该文本写入 dockerfile 并将路径传递给文件。

有没有办法,有可能

【问题讨论】:

    标签: node.js docker dockerfile docker-image dockerode


    【解决方案1】:

    我发现这是一种可行的方法

    var dockerode = require('dockerode');
    var tar = require('tar-stream');
    var zlib = require('zlib');
    
    var docker = new dockerode();
    var pack = tar.pack();
    
    function buildImage(dockerfile, tagname) {
      var header = {
        name: 'Dockerfile',
        type: 'file',
        size: dockerfile.length
      };
    
      var entry = pack.entry(header, function(err) {
        if (err) {
          console.log(err);
          pack.destroy(err);
        }
    
        pack.finalize();
      });
    
      entry.write(dockerfile);
      entry.end();
    
      docker.buildImage(pack.pipe(zlib.createGzip()), {
        t: tagname
      }, function(error, output) {
        if (error) {
          console.error(error);
        }
        output.pipe(process.stdout);
      });
    }
    
    var dockerfile = 'FROM alpine\n';
    var tagname = 'myalpine';
    
    buildImage(dockerfile, tagname);
    

    其中header 包含字符串FROM alpine 的大小

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多