构建: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'] #强制通过健康检测