LXC 容器以只读根文件系统启动

LXC 容器以只读根文件系统启动

lxc-create我正在使用 BTRFS 在 Debain Wheezy 上运行 LXC,并使用“debian”模板创建了一个容器(昨天)。

启动容器时,容器中的根文件系统是只读的。我预计容器中的根文件系统是可读写的,而不是只读的。这似乎会破坏已启动的服务,并阻止lxc-shutdown和其他主机工具与容器交互。

我一直在使用mount -o remount,rw /将 rootfs 设置为可读写,但对于容器的启动过程来说为时已晚。我只安装了几个额外的软件包,还没有进行任何重大配置。

我需要做什么才能让容器以读写 rootfs 启动?

[编辑]:主机的文件系统似乎被标记为只读。将其设为读写然后启动容器意味着容器具有读写根文件系统。但是,当容器关闭时,文件系统再次变为只读。似乎容器关闭将文件系统标记为只读。有什么办法可以阻止它这样做吗?

答案1

Debain Wheezy 上的 LXC 中的模板“debian”目前(2014 年 3 月初)不会禁用可能导致问题的服务。

在这种情况下导致问题的关键服务是“umountroot”,通过运行修复

chroot /path/to/containername/rootfs /usr/sbin/update-rc.d -f umountroot remove

其他要删除的服务包括

  • 时钟工具
  • 时钟头文件

可能还有其他方法可以解决这个问题,比如放弃能力。另一种解决方法是更改​​模板,例如http://cblog.burkionline.net/lxc-linux-container/,但请注意,它不包括 umountroot 作为已禁用的服务之一,因此需要进行调整。

答案2

令人困惑的是,remount readonly 发生在客户机关闭时,并且在下次开始

lxc-start尝试使用只读文件系统运行时,这些消息也表明了这种行为:

lxc-start: failed to pin the container's rootfs
lxc-start: failed to spawn 'containername'
lxc-start: No such file or directory - failed to remove cgroup '/sys/fs/cgroup//lxc/containername'

已创建的网络接口的主机部分也不会被删除。因此ifconfig列出剩余的条目,如vethuKwnid


感谢Ubuntu 服务器指南我验证了像这样启动容器足够

sudo lxc-start -s lxc.cap.drop=sys_admin -n containername

相关内容