在Linux容器中,如何挂载文件系统

时间:2019-11-20 08:53:39  来源:igfitidea点击:

如何在LXD(Linux容器)中挂载目录?
在Linux容器之前,如何共享数据?
如何将主机目录添加到LXD容器中?

解决方案

使用lxc命令管理正在运行的容器的设备。
使用lxc config device add命令将目录挂载到容器中。

在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

在容器上创建一个新目录:

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

将主机的/home/Hyman挂载到容器c1的/dest上。

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

检查容器的设备,查看是否已挂载上。

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容器中删除容器设备,运行:

lxc config device remove c1 myhomedir

Device myhomedir removed from c1

验证一下:

lxc config device show c1

以读写模式将目录挂载到LXC/LXD容器

默认情况下,不允许root用户从主机修改容器内的文件。
如果需要对挂载的文件夹具有读写访问权限,则需要重新映射用户ID。

从属GID文件

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

使用cat命令:

cat /etc/subgid

输出示例:

Hyman:100000:65536

其中:

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

从属uid文件

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

cat /etc/subuid

输出示例:

Hyman:100000:65536

在主机上蓉LXD容器重新映射用户ID

使用id命令查看用户的id和组id

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)

重新映射主机用户ID:

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

检查文件是否已更新:

cat /etc/{subuid,subgid}

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

在容器中查找用户Hyman的UID。 (Hyman必须在容器中也创建了):

lxc exec c1 bash
grep ^Hyman /etc/passwd

如果Hyman没有创建,则在容器中创建:

lxc exec c1 bash
adduser Hyman
id Hyman
exit

执行以下命令,将容器中的UID映射到宿主机中的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

## 退出容器
exit

## 查看宿主机中是否有容器创建的文件
ls -l test.txt
cat test.txt