从Docker容器访问主机上的ZFS

3
有没有办法从docker容器内部访问主机的ZFS快照?
我正在尝试使用zfs快照和发送/接收进行自定义备份,并在基于docker的服务器群集上运行。为了保持当前设置,我希望备份服务也能在docker容器中运行。我很难弄清楚是否有任何方法可以从docker容器内部以管理员权限访问主机文件系统。
实际上,我需要一种在容器内部运行zfs list、zfs snap和zfs send的方法。我的直觉告诉我“不行”,但也许有一些挂载选项和特权技巧的巧妙方式。
4个回答

1

对我来说,这个方法可以解决问题:

  • 在特权模式下使用Docker容器
  • 将zfs设备映射到容器中 (--device /dev/zfs)
  • 在容器中安装zfsutils-linux软件包

1

我使用带有ZFS的RancherOS 1.3.0版本,将容器放在/mnt目录下启动命令为:

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

使用这个配置,我可以克隆快照。

1

Znapzend(使用ZFS快照的备份实用程序)在其github页面上涵盖了此内容:https://github.com/oetiker/znapzend#running-in-container。我正在使用它来自动备份我的NAS到一个单独的离线备份NAS。

以下是链接中相关的信息:

---SNIP---
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运行时带有--logto /dev/stdout。如果您希望添加不同的参数,请在命令末尾覆盖它们:

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

请确保不要在容器中将znapzend变为守护进程,因为这会立即退出容器。
---SNIP---


0

很遗憾,没有办法做到那样。我们自己也遇到了同样的问题,解决方法是创建一个无容器服务,容器可以向其发出命令,无容器服务可以代表它们发出ZFS命令并返回结果。这不是完美的解决方案,但对我们来说总比没有好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接