You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用挂载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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:08:12