在 Virtualbox 共享挂载之前启动 Docker

在 Virtualbox 共享挂载之前启动 Docker

我的设置: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 运行顺序。此方法将在软件更新后继续有效

相关内容