Answers:
根据LXC文档,您可以通过特权容器执行此操作:
lxc launch ubuntu priv -c security.privileged=true
lxc config device add priv homedir disk source=/home/$USER path=/home/ubuntu
lxd
此答案中使用的LXD客户端(名称为)或LXC(带有命名工具的软件和“旧”工具集lxc-*
)或项目(其中LXC是LinuX Containers的缩写)。这就是我在Unix.SE meta上问这个问题的原因。
我在openSUSE Wiki中找到了一篇文章:https ://en.opensuse.org/User:Tsu2/ LXC_mount_shared_directory
我按照步骤操作,现在可以正常工作。
创建主机目录:
mkdir /media/data/share && chmod 7777 /media/data/share
在lxc容器中创建目录:
mkdir /share
在主机上编辑lxc配置文件:
nano /var/lib/lxc/containername/config
lxc.mount.entry = /media/data/share share none ro,bind 0.0
share
中lxc.mount.entry
是至关重要的。
下面是我将主机目录之一挂载到容器的操作。这比听起来要棘手,因为我们希望实现
在在线阅读了各种文章之后(最有用的是github问题),这就是我解决的方法。技巧是将主机用户的uid和gid映射到容器内用户的uid和gid。
假设我要安装/home/breakds/projects
到容器中的相同位置。外部目录归用户所有breakds
,其uid和gid为1000
。
然后,我在名为的容器中创建了一个用户,该用户debian
的uid和gid也恰好1000
一样(因为它是第一个非root用户)。然后,我将在主机上创建一个(lxc)配置文件
lxc profile edit breakds
以下是配置文件的内容(我相信它是yaml格式):
name: breakds
config:
raw.lxc: |
lxc.id_map =
lxc.id_map = u 0 165536 999
lxc.id_map = g 0 165536 999
lxc.id_map = u 1000 1000 1
lxc.id_map = g 1000 1000 1
lxc.id_map = u 1001 166537 64535
lxc.id_map = g 1001 166537 64535
user.vendor-data: |
packages:
- bash
description: allow home dir mounting for breakds
devices:
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
projects:
path: /home/breakds/projects
source: /home/debian/projects
type: disk
然后,将此配置文件永久应用于该容器:
$ lxc profile apply <my container> breakds
这应该可以解决问题。
注意:请注意,在切换到此配置文件之前,请确保应删除所有者/组为debian的所有目录或文件(并可能在切换后重新创建)。这是因为在uid和gid映射之后,它们的所有权将变为无效。我最初以为,因为我只是将1000映射到1000,所以一切都应该没问题,但是我想我在这里错过了一些东西,如果有人可以就如何解决这一问题提供建议,那就太好了。
chown
从主持人那里获得。
您也可以在不使用LXD的情况下通过直接编辑LXC配置文件来执行此操作:
# Container specific configuration
lxc.idmap = u 0 165536 1000
lxc.idmap = g 0 165536 1000
lxc.idmap = u 1000 1000 1
lxc.idmap = g 1000 1000 1
lxc.idmap = u 1001 166536 64535
lxc.idmap = g 1001 166536 64535
您还必须通过编辑/ etc / subuid和/ etc / subgid,确保容器的用户帐户具有映射到主机上的uid / gid 1000的权限:
containeruser:165536:65536
containeruser:1000:1