我使用 autofs 通过 sshfs 将远程文件夹挂载到本地计算机。在本地计算机上,我运行了一个使用相同挂载作为卷的 docker 容器。
如果由于某种原因挂载丢失,容器将无法看到该卷,但是由于这是一个 autofs 挂载,因此只需访问相应的文件夹即可恢复挂载,但是尽管挂载已恢复,容器仍无法恢复该卷。
我想了解是否有一种推荐的方法来确定挂载点是否恢复并触发容器相应地重新挂载卷?
我曾考虑使用 healthcheck 针对卷中的预期文件名运行一个简单的 grep 命令,但这只会报告容器是否健康,而不一定重新挂载卷。
不太优雅的解决方案是通过 docker exec 命令检查预期文件是否可用,尝试重新挂载文件夹并重新启动容器。但这似乎很像对简单问题的强行压制。
非常感谢。
答案1
在对 Askubuntu 进行进一步调查后,我发现了一些用于保持连接活动的 sshfs 附加选项。这似乎可以解决问题,结合一个脚本,该脚本直接通过容器 shell 检查挂载,然后在发生故障时重新启动它们。
autofs / sshfs 附加选项包括:
-o 重新连接,ServerAliveInterval=15,ServerAliveCountMax=3
我希望这有帮助。
答案2
您必须使用共享绑定传播进行挂载。默认情况下,它设置为rprivate
,这不允许容器将其副本挂载传播到主机,反之亦然。
只需用以下代码片段替换撰写文件中的简单挂载语法即可:
volumes:
- type: bind
source: /path/on/the/host
target: /path/in/the/container
bind:
propagation: rshared