在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