Syncthing的Docker(Syncthing官方版)安装教程

2023年3月11日 378点热度

构建:https://hub.docker.com/r/syncthing/syncthing/tags

说明:https://github.com/syncthing/syncthing/blob/main/README-Docker.md

运行 docker compose -f syncthing-st.yml up 
version: '3'
services:
  syncthing-st: #唯一
    container_name: syncthing-st  #唯一
    image: syncthing/syncthing:latest
    hostname: syncthing #optional    
    healthcheck:
      test: ['CMD-SHELL',"curl -fkLsS -m 2 127.0.0.1:28384/rest/noauth/health | grep -o --color=never OK || exit 1"] #覆写正确的健康检测命令
      #test: ['CMD','true'] #强制通过健康检测
      #interval: 1m
      #timeout: 10s
    environment:
      - STGUIADDRESS=0.0.0.0:28384	#docker只能使用这方式修改GUI端口
      - PUID=0  #不定义则默认1000用户,可能无法读取其他docker目录
      - PGID=0
    volumes:
      - ./var/syncthing:/var/syncthing
      - /root/docker/hentaiathome/:/hentaiathome/
    restart: unless-stopped
    #ports:
      #- 28384:8384
      #- 22000:22000/tcp
      #- 22000:22000/udp
      #- 21027:21027/udp
    network_mode: "host"    #主机模式.无需预先映射端口

使用说明


网络模式:
    请注意,Docker 的默认网络模式会阻止本地 IP 地址被发现,Syncthing只能看到子网上的容器。这将导致传输速率不佳如果未手动配置本地设备地址。172.17.0.0/16
    因此,建议使用主机网络模式。【network_mode: "host"

用户权限:
    PGID和PGID不做特别申明的话,容器默认使用1000用户运行Syncthing,这在调用root应用生成的文件or目录时出现没有权限的障碍。【PUID=0申明root用户。

GUI启动项覆盖监听地址:
    Dockerfile文件中预定义了GUI的环境变量【ENV STGUIADDRESS=0.0.0.0:8384】,会覆盖 配置文件/GUI 中的监听地址:
"GUI 地址已被启动选项覆盖。当覆盖存在时,此处的更改就不会生效。"
"The GUI address is overridden by startup options. Changes here will not take effect while the override is in place."
    想要修改Docker的GUI地址,在Compose文件中申明:【STGUIADDRESS=0.0.0.0:28384

健康检测:
    Dockerfile文件中预定义了健康检测,来获得 (health:starting)(healthy)(unhealthy) 三种状态:【HEALTHCHECK --interval=1m --timeout=10s \ CMD curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1】。    
    若修改了STGUIADDRESS端口,则健康检测就会误报,解决思路:和 CMD, ENTRYPOINT 一样,HEALTHCHECK 只可以出现一次,如果写了多个,只有最后一个生效。
    两种解决方式:1、覆写正确的检测命令    2、强制通过检测:
version: '3'
services:
  syncthing-st: 
    healthcheck:
      test: ['CMD-SHELL',"curl -fkLsS -m 2 127.0.0.1:28384/rest/noauth/health | grep -o --color=never OK || exit 1"] #覆写正确的健康检测命令
      #test: ['CMD','true'] #强制通过健康检测

SSJ

不积跬步无以至千里