从 docker 容器访问主机 zfs

Access hosts zfs from docker container

有没有办法从 docker 中访问主机 zfs 快照?

我正在尝试获取一些自定义备份,在基于 docker 的服务器集群上使用带有 send/receive、运行ning 的 zfs 快照。为了坚持当前的设置,我也希望 docker 容器中的 运行 备份服务。我很难弄清楚是否有任何方法可以在管理级别上从 docker 容器内访问主机文件系统。

我基本上需要一种从容器中 运行 zfs listzfs snapzfs send 的方法。我的直觉告诉我 "no",但也许有一些挂载选项和特权魔法的聪明方法

不幸的是,没有办法做到这一点。我们自己也遇到过同样的问题,我们解决这个问题的方法是创建一个容器可以向其发出命令的无容器服务,然后无容器服务可以代表它们发出 ZFS 命令 return 结果。这不是一个完美的解决方案,但(至少对我们而言)总比没有好。

我在 /mnt 上使用 rancherOS 1.3.0 和 zfs 我用以下内容启动容器:

    privileged: true
    pid: host
    volumes:
    - /mnt:/mnt:shared

有了这个 confis,我可以克隆快照

对我来说,它适用于:

  • docker 特权模式下的容器
  • zfs 设备映射到容器(--device /dev/zfs)
  • zfsutils-linux 安装在容器中

Znapzend(使用 ZFS 快照的备份实用程序)在其 github 页面中对此进行了介绍:https://github.com/oetiker/znapzend#running-in-container。我正在使用它自动将我的 NAS 备份到单独的异地备份 NAS。

这是来自 link 的相关信息:

---剪辑---
znapzend 也可以作为 docker 容器镜像使用。它需要是一个特权容器,具体取决于权限。

docker run -d --name znapzend --device /dev/zfs --privileged \
    oetiker/znapzend:master

要在交互模式下配置 znapzend,运行:

docker exec -it znapzend /bin/sh
$ znapzendzetup create ...
# After exiting, restart znapzend container or send the HUP signal to
# reload config

默认情况下,znapzend 在容器 运行s 中使用 --logto /dev/stdout。如果您想添加不同的参数,请在命令末尾覆盖它们:

docker run --name znapzend --device /dev/zfs --privileged \
    oetiker/znapzend:master znapzend --logto /dev/stdout --runonce --debug

确保不要在容器中守护 znapzend,因为它会立即退出容器。
---剪辑---