如何让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
需解决两个问题:
- 如何让容器重启后自动加载.sh脚本中的正确配置,并使用
syncthing作为容器名称? - 如何删除重复容器,且操作不会丢失数据?
一、让容器重启自动加载正确配置并使用syncthing名称
清理旧的同名容器
先停止并删除旧的syncthing容器(如果存在):sudo docker stop syncthing sudo docker rm syncthing若执行
docker stop syncthing提示容器不存在,说明旧容器已无此名称,可跳过此步骤。恢复脚本中的容器名称配置
修改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开机自动启动该容器,并加载脚本中所有挂载和环境变量配置。重新运行脚本启动容器
sudo ~/docker/syncthing/syncthing_run.sh启动后可通过
docker inspect syncthing查看容器挂载配置,确认所有卷已生效。
二、删除重复容器且不丢失数据
确认数据安全性
你的数据都存储在宿主机的$PWD/st-sync/、$PWD/data/和/redacted/目录中,容器仅运行Syncthing程序,删除容器不会影响宿主机上的数据。删除已停止的旧容器
从容器列表结果看,7dd04d0701a7是已停止的旧容器,直接删除即可:sudo docker rm 7dd04d0701a7若不确定容器身份,可先查看详细信息确认挂载配置:
sudo docker inspect 7dd04d0701a7若该容器的
Mounts字段没有你配置的挂载卷,即可放心删除。清理无用镜像(可选)
若不需要未使用的镜像,可执行以下命令清理:sudo docker image prune
内容的提问来源于stack exchange,提问作者localhost

