【问题标题】:How do you sync a host and container directory with Dockerode?如何使用 Dockerode 同步主机和容器目录?
【发布时间】:2018-09-14 09:49:36
【问题描述】:


如何将容器上的文件夹与主机上的目录同步,以便我可以删除容器并使用相同的数据再次创建它。这是我目前的代码。

let containerMeta = {
    Image: 'secret/image',
    AttachStdout: true,
    AttachStderr: true,
    Tty: true,
    ExposedPorts: {
      '19132/udp': {},
    },
    HostConfig: {
      PortBindings: {
        '19132/udp': [
          {
            HostPort: SERVER_PORT,
          },
        ],
      },
    },
  };

let container = await docker.createContainer(containerMeta);

我查看了文档,他们对这种情况并没有太多了解。

【问题讨论】:

    标签: node.js docker docker-volume


    【解决方案1】:

    你可以使用HostConfig的选项Binds

    var Docker = require('dockerode');
    
    var docker = new Docker({
      socketPath: '/var/run/docker.sock'
    });
    
    docker.createContainer({
      Image: 'ubuntu',
      Cmd: ['/bin/ls', '/stuff'],
      'Volumes': {
        '/stuff': {}
      },
      'HostConfig': {
        'Binds': ['/tmp:/stuff']
      }
    }, function(err, container) {
      container.attach({
        stream: true,
        stdout: true,
        stderr: true,
        tty: true
      }, function(err, stream) {
        stream.pipe(process.stdout);
    
        container.start(function(err, data) {
          console.log(data);
        });
      });
    });
    

    您可以在 Docker Engine API 文档中阅读更多信息:https://docs.docker.com/engine/api/v1.37/#operation/ContainerCreate

    还有我复制的示例,在dockerode 的示例中:https://github.com/apocas/dockerode/blob/master/examples/external_volume.js

    【讨论】:

    • 你能澄清一下,所以 /stuff(在容器上)与 /tmp 相同吗?我可以在没有在主机上预先创建目录的情况下执行此操作吗?
    • 是的,它将卷绑定到您的容器,这可以是主机目录(如我的示例中的 /tmp 文件夹)或卷名。它可以是host-src:container-destvolume-name:container-dest。您可以在我上面发布的链接中的 Docker 引擎文档中查看更多信息。
    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2017-04-26
    • 2017-08-18
    • 2016-06-23
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多