nmg*_*eek 4 mount nfs docker docker-compose
这个问题的重点是强制 docker-compose 等待启动mysql容器,直到安装主机文件系统。就我而言,主机文件系统保存 mysql 数据库文件。
对于依赖于mysql容器的服务,有一些脚本,例如wait-for-it,它们作为容器入口点的一部分运行。这些脚本检查网络端口上服务的可用性。但我不知道如何使容器启动等待文件系统安装在主机上。
当主机启动时,NFS 和 RAID 文件系统的启动速度可能不如容器启动的速度。如果容器启动后文件系统挂载到主机上,则容器中的绑定卷不会更新。然后容器最终无法访问已安装/绑定的文件系统。
假设您的系统使用 systemd(这很常见),解决方案是使 docker 服务依赖于文件系统的适当 .mount 单元。这将阻止 docker 在安装文件系统之前启动。例如,在https://unix.stackexchange.com上的此答案中描述了添加对挂载点的依赖关系。
对于 中列出的每个文件系统/etc/fstab,systemd 都会生成一个名为 的单元<filesystem>.mount。例如,在我的系统上,其中/etc/fstab包含:
/dev/tank/scratch /scratch xfs defaults 1 2
Run Code Online (Sandbox Code Playgroud)
我看到以下 systemd 单元:
# systemctl list-units -t mount |grep scratch
scratch.mount loaded active mounted /scratch
Run Code Online (Sandbox Code Playgroud)
[Unit]我们可以通过在单元的部分添加如下内容来使诸如 Docker 之类的服务依赖于此挂载点:
[Unit]
Requires=scratch.mount
After=scratch.mount
Run Code Online (Sandbox Code Playgroud)
该Requires指令的意思是“当您启动此服务(例如docker)时,也启动此处列出的单元”,该After指令的意思是“启动在此之前的指定单元”。
| 归档时间: |
|
| 查看次数: |
6229 次 |
| 最近记录: |