services: wb2api: build: . container_name: workbuddy2api restart: unless-stopped # 容器默认以 app 用户(uid 10001)运行。宿主机挂载目录属主不同会导致 # 「写入 auths/*.json.tmp 失败 permission denied」,三种解法任选: # 1) 非 root · 让容器以你自己的 uid 运行(挂载目录本来就是你建的): # PUID=$(id -u) PGID=$(id -g) docker compose up -d # 或写进 .env 文件:PUID=1000 / PGID=1000 # 2) sudo chown -R 10001:10001 ./auths ./data ./config.json # 3) user: "0:0" 以 root 运行(省事但容器逃逸面更大,自担) user: "${PUID:-10001}:${PGID:-10001}" environment: - TZ=Asia/Shanghai # DNS 容错:默认走 Docker 内嵌 DNS(127.0.0.11 → 宿主 systemd-resolved), # 宿主 stub 偶发 "server misbehaving" 时,上游域名解析直接失败、chat 全线 503 # (2026-09-27 00:47 实测两次)。显式指定公共 DNS 作为直连上游, # 绕开宿主 stub 这一层,抖动面小很多。 dns: - 223.6.6.6 - 119.29.29.29 - 8.8.8.8 ports: - "7863:7863" volumes: - ./auths:/app/auths - ./data:/app/data # 注意:宿主机必须先有 config.json(cp config.example.json config.json)。 # 缺失时 Docker 会把挂载点创建成目录 → 容器启动失败(程序会自动生成配置, # 但前提是它能以文件形式写入 —— 挂载目录会挡住这条路径)。 # 不挂 :ro:面板「配置」页需要写回此文件(保存后热生效)。 - ./config.json:/app/config.json # 让容器能用 host.docker.internal 访问宿主上的 resin 代理网关(2268/2269)。 extra_hosts: - "host.docker.internal:host-gateway" networks: - default # 与 warp 代理容器同网,供 global 域走代理出口(config: upstream.proxy_global)。 # 国际版上游对网关出口 IP 做 WAF 风控,直连会被 403 拦截页整片封停。 - warp_default networks: default: warp_default: external: true name: warp_default