我的设置:Virtualbox 带有 Windows 主机和 Ubuntu Server 客户机。Ubuntu 现在是 21.04,但在从 20.04 升级之前就存在此问题。在 Ubuntu Server 上,我运行 Docker。
问题:我认为 VirtualBox 的共享是由 Vbox 客户机插件挂载的,但直到 Docker 启动后才挂载。容器启动正常,因为它们的配置位于本地驱动器 /home 上,但它们的数据位于共享上。由于 Docker 在挂载共享之前启动,因此容器作为目录而不是挂载点绑定到挂载点,并且它们可以在那里写入磁盘,从而用不可见文件填充根文件系统。
除了跟上 Ubuntu 更新之外,我最近没有做任何更改,但我觉得我可能在过去的某个地方设置了 sleep 来解决这个问题。我可以尝试再次执行此操作,但似乎不太优雅,我想知道是否有更好的方法通过 systemd 或其他方式。
我尝试了许多 systemd 指令,但都无济于事。我认为 RequiresMountsFor 和 ConditionPathIsMountPoint 这两个指令可能有用。我还尝试告诉 docker 服务在 vbox 访客服务之后启动,但这也没用。
有什么建议么?
答案1
解决方案是覆盖 containerd 的 systemd 服务文件。
跑步
systemctl edit containerd
在评论指定的位置添加以下内容。
[Unit]
After=
After=network.target local-fs.target vboxadd-service.service
Requires=vboxadd-service.service
第一个 After= 清除该指令,为新指令做好准备。After 和 Requires 都是必需的。保存此文件,然后重新启动主机。
运行无问题,并通过“systemd-analyse plot”确认,这是一个非常有用的命令,用于查询您的 systemd 运行顺序。此方法将在软件更新后继续有效