介绍
由于某些服务在启动时不考虑启动顺序,会出现硬盘还未挂载但服务已经启动的状况,造成找不到路径等问题。通过设置 systemd 的 After 项,可以实现在硬盘挂载后再启动相应的服务。
容器 volume 使用 nfs 挂载路径问题
生产环境就遇到过此问题,踩了大半天坑。情况是这样的:我的docker容器是 xxx,开机会自动启动,对应的 docker compose 中有 py 脚本文件的 volume 映射,例如:
volumes: - "${MYDATA_HOME:?err}/xxx/custom_python/main.py:/mnt/workspace/xxx/main.py"
custom_python/main.py 是宿主机上 NFS 挂载路径中的文件,且在 fstab中配置了。
出现的现象:启动电脑 xxx 容器一直起不来,查看 systemctl status docker 有报错:
排查时将fstab中配置的nfs去掉,重启docker也是报上面的错,xxx 服务也是起不来,因此判定开机时 nfs 还没挂载好就启动了 xxx服务。
解决办法:
(1)执行 systemctl list-units –type=mount ,找到 home-xxx-custom_python.moun:
(2)执行 systemctl status docker 找到 /lib/systemd/system/docker.service,在 After 项后加这个 home-xxx-custom_python.moun:
重启电脑,问题解决!