AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 896854
Accepted
emmerich
emmerich
Asked: 2018-02-13 04:23:31 +0800 CST2018-02-13 04:23:31 +0800 CST 2018-02-13 04:23:31 +0800 CST

如何授予对 Docker 容器动态创建的环回设备的访问权限?

  • 772

我有一个小型 Docker 容器,可以从中访问 /dev/loop0。为此,我添加了docker run:

--device=/dev/loop-control:/dev/loop-control \
--device=/dev/loop0:/dev/loop0 \

在这个环回设备上,我正在使用 parted/fdisk 创建两个或多个分区。

现在,我需要挂载两个分区,但不幸的是我无法访问动态创建的任何一个或任何其他分区/dev/loop0p1。/dev/loop0p2

有什么方法可以访问它们而无需生成容器--privileged?

谢谢你。

permissions
  • 1 1 个回答
  • 1403 Views

1 个回答

  • Voted
  1. Best Answer
    mxg
    2019-11-14T16:18:57+08:002019-11-14T16:18:57+08:00

    尽管这个问题很老,但这仍然是一个问题。

    Linux 内核不会将设备注册事件传播到容器,这就是为什么/dev/*容器运行时添加的设备文件不会出现在容器中的原因。

    作为容器内的解决方法,您可以查找丢失的设备文件并像以下 shell 脚本那样创建它们:

    FILTER='^loop'
    lsblk --raw -a --output "NAME,MAJ:MIN" --noheadings | grep -E "$FILTER" | while read LINE; do
        DEV=/dev/$(echo $LINE | cut -d' ' -f1)
        MAJMIN=$(echo $LINE | cut -d' ' -f2)
        MAJ=$(echo $MAJMIN | cut -d: -f1)
        MIN=$(echo $MAJMIN | cut -d: -f2)
        [ -b "$DEV" ] || mknod "$DEV" b $MAJ $MIN
    done
    

    (我曾经FILTER='^(r|n)bd'匹配/dev/rbdX和/dev/nbdX设备 ceph 在我的情况下动态创建。)

    请注意,上面的脚本不会取消注册已在主机上删除的设备。如果您还需要这样做,您也可以运行以下命令(FILTER需要指定):

    find /dev -mindepth 1 -maxdepth 1 -type b | cut -d/ -f3 | grep -E "$FILTER" | sort > /tmp/devs-created
    lsblk --raw -a --output "NAME" --noheadings | grep -E "$FILTER" | sort > /tmp/devs-available
    for ORPHAN in $(comm -23 /tmp/devs-created /tmp/devs-available); do
        rm /dev/$ORPHAN
    done
    

    如果您的设备是动态创建的,您可能希望在容器中定期运行这两个脚本。

    您仍然需要运行容器--privileged才能使用设备。

    另请参阅我的脚本所基于的这个 moby 问题评论。

    • 3

相关问题

  • 如何在 Exchange 2007 中设置资源邮箱日历的忙/闲权限?

  • 共享文件夹中某些文件的访问被拒绝错误

  • Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

  • 如何授予用户安装 Windows 服务的能力?

  • 限制用户向电子邮件地址发送电子邮件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve