[2025-08-06 12:22:12] - 更新 Dockerfile:
- 使用 debian-slim 作为基础镜像。
- 设置时区为 Asia/Shanghai。
- 安装 wget, curl, 7z, bash。
- 解压 syncthing-linux-amd64-v1.26.1.tar.gz 到 /syncthing/。
- 创建 /start.sh 启动脚本,支持 isrun 环境变量条件判断启动。
- 卸载 7z 并清理 apt 缓存。
- 清理日志文件和临时文件。
- 设置工作目录为 /syncthing。
- 容器启动时执行 /start.sh。
[2025-08-06 13:20:01] - 修复 Dockerfile 并成功构建镜像:
- 将 `syncthing-linux-amd64-v1.26.1.tar.gz` 更正为 `syncthing-linux-amd64-v1.26.1.tar.zip`。
- 将解压命令从 `tar -xzf` 更改为 `unzip`。
- 成功构建 Docker 镜像 `lsxposed/syncthing:v1.26.1`。
[2025-08-06 13:30:57] - 成功创建并测试了 docker-compose.yml,修复了多个问题并实现 Web 界面访问:
- 创建了包含资源限制、日志配置和网络设置的 docker-compose.yml。
- 修复了 Syncthing 可执行文件路径问题(从 `/syncthing/syncthing` 到 `/syncthing/syncthing/syncthing`)。
- 添加了可执行权限 `chmod +x /syncthing/syncthing/syncthing`。
- 修改了 GUI 监听地址从 `127.0.0.1:8384` 到 `0.0.0.0:8384` 以允许外部访问。
- 解决了端口冲突,将本地端口映射从 8384 改为 8385。
- Syncthing Web 界面现在可以通过 http://localhost:8385 成功访问。
[2025-08-06 13:41:39] - 完成启动脚本环境变量功能测试,验证 isrun 条件判断机制:
- ✅ 测试1:`isrun=[ 1 -eq 1 ]` (始终为true) - 条件立即满足,Syncthing 正常启动
- ✅ 测试2:`isrun=[ 1 -eq 2 ]` (始终为false) - 脚本循环等待,每5秒输出等待消息
- ✅ 测试3:`isrun=[ -d "/var/syncthing/data" ]` (存在目录) - 条件满足,正常启动
- ✅ 测试4:`isrun=[ -d "/home/sync" ]` (不存在目录) - 循环等待直到目录创建后启动
- 启动脚本的 isrun 环境变量功能完全符合原需求,支持条件判断启动和循环等待机制。
version: '3.8'
services:
syncthing:
image: lsxposed/syncthing:v1.26.1
container_name: syncthing
restart: always
# 端口映射 - Syncthing Web UI 和同步端口
ports:
- "8385:8384" # Web UI 端口 (映射到本地8385避免冲突)
- "22000:22000" # 同步端口 TCP
- "22000:22000/udp" # 同步端口 UDP
- "21027:21027/udp" # 发现端口
# 卷挂载 - 数据持久化
volumes:
- syncthing_config:/var/syncthing/config
- syncthing_data:/var/syncthing/data
- ./config:/config
# 环境变量
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
# 资源限制
deploy:
resources:
limits:
memory: 500M
cpus: '0.2'
# 日志配置
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# 网络配置(临时注释,因为测试环境不想创建)
# networks:
# - mynetworks1
# - mynetworks2
# 卷定义
volumes:
syncthing_config:
driver: local
syncthing_data:
driver: local
# 网络定义(临时注释)
# networks:
# mynetworks1:
# external: true
# mynetworks2:
# external: true
# 使用 debian-slim 作为基础镜像
FROM debian:bullseye-slim
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安装 wget, curl, 7z, bash 并清理缓存
RUN apt-get update && \
apt-get install -y --no-install-recommends wget curl p7zip-full bash unzip && \
rm -rf /var/lib/apt/lists/*
# 将 syncthing 压缩包添加到镜像并解压
# 假设解压后会在当前目录生成一个名为 syncthing-linux-amd64-v1.26.1 的目录,其中包含 syncthing 可执行文件
# 用户要求解压到 /syncthing/,所以需要调整路径
COPY syncthing-linux-amd64-v1.26.1.tar.zip /tmp/syncthing-linux-amd64-v1.26.1.tar.zip
RUN mkdir -p /syncthing && \
unzip /tmp/syncthing-linux-amd64-v1.26.1.tar.zip -d /syncthing && \
chmod +x /syncthing/syncthing/syncthing && \
rm /tmp/syncthing-linux-amd64-v1.26.1.tar.zip
# 编写启动脚本 /start.sh
# 使用 tee 命令写入文件,并设置可执行权限
RUN echo '#!/bin/bash' > /start.sh && \
echo 'set -e' >> /start.sh && \
echo '' >> /start.sh && \
echo 'if [ -n "$isrun" ]; then' >> /start.sh && \
echo ' while true; do' >> /start.sh && \
echo ' if eval "$isrun"; then' >> /start.sh && \
echo ' echo "Condition met: $isrun"' >> /start.sh && \
echo ' break' >> /start.sh && \
echo ' else' >> /start.sh && \
echo ' echo "Condition not met: $isrun. Waiting..."' >> /start.sh && \
echo ' sleep 5' >> /start.sh && \
echo ' fi' >> /start.sh && \
echo ' done' >> /start.sh && \
echo 'fi' >> /start.sh && \
echo '' >> /start.sh && \
echo 'exec /syncthing/syncthing/syncthing -home="/config"' >> /start.sh && \
chmod +x /start.sh
# 卸载 7z 并清理 apt 缓存
RUN apt-get remove -y p7zip-full && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 清理日志文件和临时文件
RUN find /var/log -type f -delete && \
find / -name '*.log' -type f -print -exec rm -rf {} \; && \
rm -fr /tmp/*
# 设置工作目录
WORKDIR /syncthing
# 容器启动时执行 /start.sh
ENTRYPOINT ["/start.sh"]
Content type
Image
Digest
sha256:34c7ab080…
Size
60.6 MB
Last updated
about 1 year ago
docker pull lsposed/syncthing:v2.0.0