【发布时间】:2021-04-01 19:21:58
【问题描述】:
这个问题的重点是强制 docker-compose 等待启动 mysql 容器,直到挂载主机文件系统。在我的例子中,主机文件系统保存着 mysql 数据库文件。
对于依赖于 mysql 容器的服务,有一些脚本,例如 wait-for-it,它们作为容器入口点的一部分运行。这些脚本检查网络端口上服务的可用性。但我看不到如何让容器启动等待文件系统安装在主机上。
当主机启动时,NFS 和 RAID 文件系统的启动速度可能不如容器启动的快。如果文件系统在容器启动后挂载到主机上,则容器中的绑定卷不会更新。然后容器最终无法访问已安装/绑定的文件系统。
【问题讨论】:
-
假设您的系统使用 systemd(这很常见),解决方案是使
docker服务依赖于文件系统的适当.mount单元。这将阻止 docker 在文件系统挂载之前启动。例如。如here所述。 -
很好的答案@larsks。我假设您的意思是将
mnt-mountpoint.mount添加到/lib/systemd/system/docker.service中After行的末尾。我通过卸载文件系统然后停止并启动 docker 守护进程进行了测试。不幸的是,这些容器都是从卸载文件系统开始的。接下来我将测试重新启动。 -
对linked question 的更彻底阅读表明,我还需要将
mnt-mountpoint.mount添加到Requires行。现在,如果文件系统未挂载,docker 服务将拒绝启动。 @larsks 请发布您的答案,以便我接受。
标签: docker docker-compose mount nfs