我的设置:带有 Windows 主机和 Ubuntu Server 来宾的 Virtualbox。Ubuntu 现在是 21.04,但在从 20.04 升级之前就存在问题。我在 Ubuntu 服务器上运行 Docker。
问题:我认为由 Vbox 来宾插件安装的来自 virtualbox 的共享直到 Docker 启动后才会安装。容器启动正常,因为它们的配置位于本地驱动器 /home 上,但是它们在共享上有数据。因为 Docker 在挂载共享之前启动,所以容器作为目录而不是挂载绑定到挂载点,它们可以写入磁盘,在那里用不可见的文件填充根文件系统。
除了跟上 Ubuntu 更新之外,我最近没有做任何更改,但我觉得我可能在过去的某个地方睡了一会儿来解决这个问题。我可以考虑再做一次,但这似乎不太优雅,我想知道是否有更好的方法通过 systemd 或其他方式。
我尝试了一个数字或 systemd 指令,但没有任何运气。RequiresMountsFor 和 ConditionPathIsMountPoint 是我认为可能有用的两个。我还试图告诉 docker 服务在 vbox 访客服务之后启动,但这也不起作用。
有什么建议么?
解决方案是覆盖 containerd 的 systemd 服务文件。
跑
在注释中指定的位置添加以下内容。
第一个 After= 清除该指令为新指令做好准备。After 和 Requires 都是必需的。保存此文件,然后重新启动主机。
工作没有问题,并通过“systemd-analysis plot”确认,这是一个非常有用的命令,用于询问你的 systemd 运行顺序。此方法将在软件更新后继续存在