使用挂载CIFS卷时Docker容器开机无法重启的问题求助
解决Docker容器开机启动时CIFS网络卷挂载失败问题
方案一:通过docker-compose.yml优化(优先方案)
该方案无需修改主机系统配置,完全通过容器配置解决问题,提供两种优化方向:
1. 调整容器重启策略
将原有的restart: always改为带重试次数的失败重启策略,让容器在挂载失败后自动重试,直到CIFS卷可用:
services: runner: # 保留其他原有配置... restart: on-failure:5 # 失败后最多重试5次,可根据需求调整次数
2. 启动前检测CIFS共享可用性
在容器启动命令前添加检测脚本,确保CIFS服务器和共享可用后再启动主程序。需替换脚本中的./run.sh为容器实际的启动命令:
services: runner: # 保留其他原有配置... command: > sh -c ' # 检测CIFS服务器连通性 until ping -c 1 10.0.253.30; do echo "Waiting for CIFS server to be reachable..." sleep 5 done # 执行容器原启动命令 ./run.sh '
如果需要更精准的共享检测(避免服务器通但共享不可用的情况),可使用smbclient(需确保容器内已安装samba-client包):
command: > sh -c ' until smbclient -L //10.0.253.30 -U xxxx%xxxx > /dev/null 2>&1; do echo "Waiting for CIFS share to be available..." sleep 5 done ./run.sh '
方案二:修改systemd单元文件(备选方案)
如果docker-compose方案无法满足需求,可通过调整systemd依赖关系,确保Docker在CIFS共享可用后再启动:
1. 创建CIFS共享检测服务
新建/etc/systemd/system/cifs-check.service文件,内容如下:
[Unit] Description=Verify CIFS Share Availability After=network-online.target Wants=network-online.target [Service] Type=oneshot # 替换为你的CIFS认证信息 ExecStart=/bin/sh -c 'until smbclient -L //10.0.253.30 -U xxxx%xxxx > /dev/null 2>&1; do sleep 5; done' RemainAfterExit=yes [Install] WantedBy=multi-user.target
2. 修改Docker服务的依赖配置
编辑/etc/systemd/system/docker.service.d/override.conf,更新为以下内容:
[Unit] Requires=cifs-check.service network-online.target After=cifs-check.service network-online.target
3. 生效配置并启用服务
执行以下命令重新加载systemd配置并启用检测服务:
sudo systemctl daemon-reload sudo systemctl enable cifs-check.service
内容的提问来源于stack exchange,提问作者Alistair McCutcheon
相关产品推荐
相关产品推荐

