如何在LXD(Linux容器)中添加或挂载目录

时间:2020-01-09 14:16:50  来源:igfitidea点击:

我有两个正在运行的LXD容器。
一个用于Nginx,另一个用于处理数据。
我需要在两个容器之间共享数据。
如何在两个之间添加或挂载共享目录?
可以使用lxc命令管理正在运行的容器的设备。
要将目录等设备添加到容器,请使用lxc config device add命令。
本教程说明如何将主机目录添加到LXD容器

如何在LXD/LXC中添加或挂载目录

在LXD中挂载目录的过程如下:

  • 打开终端应用程序
  • 对于使用ssh命令的远程LXD/Linux服务器登录
  • 要将主机/wwwdata /目录挂载到名为c1'的LXD容器中的/var/www/html /中,请运行:`lxc config device add c1 sharedwww disk source =/wwwdata/path =/var/www/html /
  • 通过运行以下命令来验证目录是否已安装到c1容器上:`lxc exec c1-" ls/var/www/html"

让我们详细了解将目录以只读和读/写模式安装到容器上的所有步骤。

在LXD中挂载主目录(只读)

语法如下:

lxc config device add {container-name} {name} disk source={/path/to/source/dir/} path={/path/to/dest/onto/container/}

让我们创建一个名为c1的新容器:

lxc launch images:centos/8/amd64 c1
lxc list c1

在名为c1的容器上创建一个名为/dest /的新目录,运行:

lxc exec c1 -- "mkdir /dest/"
lxc exec c1 -- "ls -ld /dest/"

将$HOME(/home/Hyman /)目录挂载在/dest /的c1上(只读):

lxc config device add c1 myhomedir disk source=$HOME path=/dest/

或者

lxc config device add c1 myhomedir disk source=/home/Hyman/ path=/dest/

请注意,如果/dest /目录不存在,则将由上述lxc命令自动创建。
现在,将该磁盘添加到c1上,进行验证:

lxc config device show c1

重新启动容器以验证设置仍然有效:

lxc restart c1
lxc config device show c1
## login onto c1 container ##
lxc exec c1 bash
cd /dest/
ls -l
## is it read-only or read-write? ##
mkdir foo
exit

如何从LXD容器中删除/删除/卸载目录

要从c1容器中删除容器设备,例如名为myhomedir的磁盘,请运行:

lxc config device remove c1 myhomedir
`Device myhomedir removed from c1`

验证一下:

lxc config device show c1
`{}`

将共享的主机目录添加到LXC/LXD容器(读写模式)

默认情况下,不允许root用户从主机修改容器内的文件。
它是LXD的安全功能。
换句话说,如果需要对装入的文件夹具有读写访问权限,则需要重新映射用户ID。

下属的GID文件

/etc/subgid中的每一行都包含一个用户名和允许用户使用的一系列下级组ID。
该文件使用newgidmap命令指定普通用户可以用来在用户名称空间中配置gid映射的组ID。
这由三个用冒号()分隔的字段指定。
使用cat命令:

cat /etc/subgid

输出示例:

Hyman:100000:65536

Whre字段是:

  • Hyman主机上的登录名或UID
  • 100000数字下属组ID
  • 65536数字下属组ID计数

下级uid文件

同样,"/etc/subuid"中的每一行都包含一个用户名和允许该用户使用的一系列下级用户ID。
该文件使用newuidmap命令指定普通用户可以用来在用户名称空间中配置uid映射的用户ID。
要查看此文件,请运行:

cat /etc/subuid

输出示例:

Hyman:100000:65536

如何允许LXD在主机上重新映射您的用户ID

使用id命令找出您的uid/gid:

id

输出示例:

uid=1000(Hyman) gid=1000(Hyman) groups=1000(Hyman),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),115(lpadmin),116(sambashare),998(lxd)

接下来,我将允许以root用户身份运行的LXD恶魔在容器内重新映射我的主机用户ID:

echo "root:1000:1" | sudo tee -a /etc/subuid /etc/subgid

这是一次设置,无需重复。
确保文件已更新:

cat /etc/{subuid,subgid}

如何在容器内重新映射用户ID

在名为Hyman的用户的容器内找到UID(用户帐户必须存在于c1中):

lxc exec c1 bash
grep ^Hyman /etc/passwd

如果上述grep命令未显示任何输出,请创建一个名为的用户帐户:

lxc exec c1 bash
adduser Hyman
id Hyman
exit

执行以下命令以将UID和GID映射到主机UID(1000)到c1容器1000 UID(插孔):

lxc config set c1 raw.idmap "both 1000 1000"

重新启动容器以使设置生效:

lxc restart c1

最后,以读/写模式挂载和映射目录:

lxc config device add c1 myhomedir disk source=/home/Hyman/ path=/home/Hyman/
lxc config show c1

测试一下

lxc exec c1 bash
cd /home/Hyman
mkdir delta
echo "www.theitroad.com" > test.txt
cat test.txt
rmdir delta
## back to host ##
exit
## make sure bar.txt still exists on host ##
ls -l test.txt
cat test.txt

以读写模式成功将主机/home/Hyman /目录安装到c1容器上