我有以下内容,/var/lib/lxc/container1/config
以便我的容器可以从主机看到该文件。
lxc.mount.entry = /etc/someconf.conf etc/someconf.conf none bind,create=file 0 0
我可以在容器中看到它,并且它644
在那里有权限,但是这是我从主机看到的。
root@node01:~# ls -l /var/lib/lxc/container1/rootfs/etc/someconf.conf
---------- 1 root root 0 Jul 16 11:29 /var/lib/lxc/container1/rootfs/etc/someconf.conf
您知道为什么会这样,如何解决它或者是否有更好的方法。
答案1
您会看到第一次根据请求 ( create=file
) 创建的基本文件,因为它不存在,将在该文件上应用绑定挂载。
在容器命名空间中,不会看到这个空文件,因为它被主机/etc/someconf.conf
安装在其上的实际文件覆盖。是的,您可以在目录上绑定挂载目录,或者一个文件上一个文件。
要获得容器看到的文件系统的实际视图,但仍从主机看到,您可以使用/proc/[pid]/root/
快捷方式,该快捷方式将提供 PID [pid] 的进程看到的视图(如在主机上看到的),即在容器的挂载命名空间中。
可lxc-info
用于以编程方式获取此类 PID(容器的初始 PID 在容器内被视为 PID 1)。对于正在运行的容器,foo
以下命令仅输出从主机看到的其 PID:
lxc-info -H -p -n foo
因此,要从容器的角度但仍然从主机的角度查看文件,完整的命令变为:
ls -l /proc/$(lxc-info -H -p -n foo)/root/etc/someconf.conf
可以使用相同的方法轻松地在主机和容器上的“不可见”文件系统之间移动文件,例如临时文件系统安装/tmp
在容器内。