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
    • 最新
    • 标签
主页 / ubuntu / 问题 / 691039
Accepted
user47227
user47227
Asked: 2015-10-29 04:39:04 +0800 CST2015-10-29 04:39:04 +0800 CST 2015-10-29 04:39:04 +0800 CST

将共享主机目录添加到 LXC/LXD 容器

  • 772

我一直在 Ubuntu 14.04 上试验 LXC/LXD,一切都很好。我只需要弄清楚如何让共享目录在我的主机和容器之间工作,这样我就可以一劳永逸地抛弃 Virtualbox。

我看过这个页面:https ://wiki.gentoo.org/wiki/LXD

其中提供了说明,但我只是不断收到错误。

有谁知道任何简单明了的说明来使它正常工作?非常感谢任何帮助。

lxc
  • 5 5 个回答
  • 40083 Views

5 个回答

  • Voted
  1. ph0t0nix
    2016-03-06T13:42:51+08:002016-03-06T13:42:51+08:00

    您提到的https://wiki.gentoo.org/wiki/LXD上的说明是正确的,但可能需要更多解释。

    在主机上,您首先检查存储容器数据的目录的所有权。跑

    sudo ls -l /var/lib/lxd/containers
    

    并检查您要与之共享目录的容器的所有者。在我的例子中,uid和gid都是 100000。

    接下来,使用这些来更改您要共享的目录的所有权:

    sudo chown 100000:100000 /tmp/share_on_host
    

    按照您在评论中指出的方式与容器共享目录:

    lxc config device add mycontainer sharedtmp disk \
                      path=/tmp/share_on_guest source=/tmp/share_on_host
    

    现在,在容器中,您将看到该目录/tmp/share_on_guest(我不建议挂载您的目录,/tmp因为系统将其用于其他内容并具有特殊权限)由 root 拥有。从这里开始,您可以chown在容器中使用将所有权更改为适当的uid并且gid适合您在容器中的用户。

    作为旁注,在将容器中的所有权更改为例如具有uid33 的用户后,您将在主机上看到uid现在有 100033,这完全有意义。

    • 21
  2. Guest8354542556745
    2017-02-13T02:41:44+08:002017-02-13T02:41:44+08:00

    这是这个问题的更新答案。

    /var/www像/var/test在容器中一样安装主机文件夹。

    lxc config device add mycontainer vartest disk source=/var/www path=/var/test
    
    • 8
  3. Brent Bradburn
    2017-09-23T21:47:50+08:002017-09-23T21:47:50+08:00

    您可以为容器分配额外的设备,这些设备可以是主机可访问的文件夹。

    $ lxc config ## display help
    ...
    lxc config device add [<remote>:]<container> <device> <type> [key=value...]
        Add a device to a container.
    ...
    

    请注意,这<device>只是您分配的任意名称,将用作后续设备管理的 ID。

    例如,将主机文件夹“./host”挂载为容器中的“/mnt/host”...

    lxc config device add mycontainer vartest disk source=$(pwd)/host path=/mnt/host
    

    仍然存在一个问题——如果您希望主机和容器都可以写入此文件夹,则需要相应地配置所有权和权限。idLXD 的默认模式使用户和组值 的数字范围虚拟化,这使情况变得复杂。然而,有一个简单的解决方案:通过将容器配置为以主机等效权限运行来绕过此虚拟化...

    lxc config set <container> security.privileged true
    

    目前我还不清楚这种方法对主机安全的全部影响,但似乎在某种程度上被虚拟化“包含”了。实际风险取决于您使用容器的方式和原因。请参阅https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers上的技术说明

    进一步注意,如果您通常以非 root 用户身份在容器中操作,这种方法可能最有效,例如,如果您附加...

    lxc exec zesty -- su --login ubuntu
    
    • 有关配置的附加说明:https ://help.ubuntu.com/lts/serverguide/lxd.html
    • 4
  4. joerg
    2019-08-25T20:14:39+08:002019-08-25T20:14:39+08:00

    基于ph0t0nix 的出色回答,我为我的 Ubuntu 18.04 服务器提出了以下分步方法:

    1. 在主机中确定 rootfs 所有者的 UID:

      sudo ls -l /var/lib/lxd/storage-pools/lxd/containers/webserver/rootfs  
      id -u root   → 100000
    2. 在容器中确定ubuntu的UID(即容器中的用户):

      id -u ubuntu   → 1000
    3. 在主机中创建共享文件夹并将其添加到容器中:

      lxc config device add webserver mydevicename disk path=/home/share_on_guest source=/home/share_on_host
      
    4. 在共享文件夹的主机 UID 中调整(UID = UID host + UID guest):

      sudo chown 101000:101000 /home/share_on_host
      
    5. 来宾(用户 ubuntu)现在可以访问共享文件夹,并且可以使用chmod.

    • 3
  5. Best Answer
    user47227
    2015-10-29T05:33:04+08:002015-10-29T05:33:04+08:00

    我现在有一个有效的、安全的解决这个问题的方法,使用 LXD 配置文件来处理容器和主机上的 UID 和 GID 之间的映射。

    可以在这里找到一个非常有用的要点:

    https://gist.github.com/bloodearnest/ebf044476e70c4baee59c5000a10f4c8

    • 0

相关问题

Sidebar

Stats

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

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve