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

如何让Syncthing Docker容器重启后带正确配置自动启动及清理重复容器

问题描述

我是Docker新手,安装运行Syncthing Docker容器后,起初正常,但重启电脑后,容器自动启动却未加载syncthing_run.sh脚本中的额外配置(无挂载卷等),仅使用默认配置,无法与其他设备同步,仅保留默认共享目录。

尝试通过脚本启动时,提示已有名为syncthing的容器在运行,我执行sudo docker stop syncthing停止容器后,移除了脚本里的--name syncthing行,脚本内容如下:

IDu=$(id -u $(logname)) # Saves the logged in user id in the IDu variable
IDg=$(id -g $(logname)) # Saves the logged in user group in the IDg variable

docker run -d \
 --hostname=syncthing-redacted \
 --network=host \
 -v $PWD/st-sync/:/var/syncthing/ \
 -v $PWD/data/:/var/syncthing/data/ \
 -v /redacted/:/var/syncthing/redacted/ \
 -e TZ="Australia/Sydney" \
 -e PUID=$IDu \
 -e PGID=$IDg \
 --restart=unless-stopped \
syncthing/syncthing:latest

运行sudo ~/docker/syncthing/syncthing_run.sh后容器恢复正常,但生成了新容器,执行sudo docker container ls -a | grep syncthing显示:

88e447e1cd78   syncthing/syncthing:latest      "/bin/entrypoint.sh …"   27 minutes ago      Up 27 minutes (healthy)
7dd04d0701a7   syncthing/syncthing:latest      "/bin/entrypoint.sh …"   12 days ago         Exited (0) 34 minutes ago

需解决两个问题:

  1. 如何让容器重启后自动加载.sh脚本中的正确配置,并使用syncthing作为容器名称?
  2. 如何删除重复容器,且操作不会丢失数据?

解决方案

一、让容器重启自动加载正确配置并使用syncthing名称

  1. 清理旧的同名容器
    先停止并删除旧的syncthing容器(如果存在):

    sudo docker stop syncthing
    sudo docker rm syncthing
    

    若执行docker stop syncthing提示容器不存在,说明旧容器已无此名称,可跳过此步骤。

  2. 恢复脚本中的容器名称配置
    修改syncthing_run.sh脚本,将--name syncthing加回到docker run命令中,确保脚本内容如下:

    IDu=$(id -u $(logname)) # Saves the logged in user id in the IDu variable
    IDg=$(id -g $(logname)) # Saves the logged in user group in the IDg variable
    
    docker run -d \
     --name syncthing \
     --hostname=syncthing-redacted \
     --network=host \
     -v $PWD/st-sync/:/var/syncthing/ \
     -v $PWD/data/:/var/syncthing/data/ \
     -v /redacted/:/var/syncthing/redacted/ \
     -e TZ="Australia/Sydney" \
     -e PUID=$IDu \
     -e PGID=$IDg \
     --restart=unless-stopped \
    syncthing/syncthing:latest
    

    --name syncthing用于固定容器名称,方便管理;--restart=unless-stopped参数会让Docker开机自动启动该容器,并加载脚本中所有挂载和环境变量配置。

  3. 重新运行脚本启动容器

    sudo ~/docker/syncthing/syncthing_run.sh
    

    启动后可通过docker inspect syncthing查看容器挂载配置,确认所有卷已生效。

二、删除重复容器且不丢失数据

  1. 确认数据安全性
    你的数据都存储在宿主机的$PWD/st-sync/、$PWD/data/和/redacted/目录中,容器仅运行Syncthing程序,删除容器不会影响宿主机上的数据。

  2. 删除已停止的旧容器
    从容器列表结果看,7dd04d0701a7是已停止的旧容器,直接删除即可:

    sudo docker rm 7dd04d0701a7
    

    若不确定容器身份,可先查看详细信息确认挂载配置:

    sudo docker inspect 7dd04d0701a7
    

    若该容器的Mounts字段没有你配置的挂载卷,即可放心删除。

  3. 清理无用镜像(可选)
    若不需要未使用的镜像,可执行以下命令清理:

    sudo docker image prune
    

内容的提问来源于stack exchange,提问作者localhost

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:01:41