docker-compose.yml
Rama main · réplica de lectura del repositorio original.
# ============================================================
# Graw Server Panel - Docker Compose 编排(完整管理宿主机模式)
#
# 方案说明:
# 将宿主机根目录 "/" 挂载到容器内 "/host",并通过环境变量
# HOST_ROOT=/host 让面板后端(Go 版 backend-go 的 hostfs 适配层)据此:
# - 读写宿主机文件(文件管理、网站配置、日志、证书等)
# - 通过 chroot /host 执行宿主机命令(nginx/certbot/iptables/crontab)
# 配合 privileged + host 网络 + pid:host,面板可完整管理宿主机。
#
# 高权限说明(面板必需):
# - privileged 授予完整内核能力(访问设备、iptables、chroot、挂载等)
# - network_mode: host 使用宿主机网络,管理端口/防火墙,直接监听 8000
# - pid: host 共享宿主机进程命名空间(进程管理/系统监控)
# - 挂载 Docker socket 启用容器与镜像管理
#
# 安全警告:该容器拥有宿主机 root 级权限,仅部署于可信环境,
# 请务必修改默认密码并妥善保护登录凭据。
#
# 用法:
# 启动: docker compose up -d --build
# 查看日志: docker compose logs -f
# 停止: docker compose down
#
# 注意: privileged / host 网络 / pid host 均为 Linux 特性,
# 在 Docker Desktop for Windows 上无法完整生效。
# ============================================================
services:
graw:
build:
context: .
dockerfile: Dockerfile
image: shunx/graw
container_name: graw-panel
# ---------- 高权限运行(面板必需) ----------
privileged: true # 授予容器全部能力
network_mode: host # 使用宿主机网络,直接监听宿主机 8000 端口
pid: host # 共享宿主机进程命名空间(进程管理/监控)
# ---------- 数据与宿主机资源挂载 ----------
volumes:
# 面板自身数据(用户账号、签名密钥、站点/证书/任务配置等)。
# 用 bind mount 绑定到宿主目录,而不是匿名命名卷:这样才能让
# 宿主机 docker 直接读到 appstore 的 docker-compose.yml(见 GRAW_HOST_DATA)。
- /opt/graw/data:/app/backend/data
# 宿主机根目录:面板据此完整管理宿主机文件系统与命令
- /:/host:rslave
# Docker 管理功能(容器 / 镜像 / 日志):复用宿主机 Docker daemon 的 socket
- /var/run/docker.sock:/var/run/docker.sock
environment:
# 告知后端宿主机根目录挂载点,启用 /host 模式(关键配置)
- HOST_ROOT=/host
# 宿主上 === 面板 data 目录的路径:宿主 docker 据此读取 compose 文件/导出备份
- GRAW_HOST_DATA=/opt/graw/data
- TZ=Asia/Shanghai
# 使用 host 网络后,端口由宿主机直接占用(8000),无需 ports 映射。
# 若改用 bridge 网络,可取消下面注释并删除 network_mode 行。
# ports:
# - "8000:8000"
restart: unless-stopped
# 若希望用命名卷持久化面板数据(非本机化),可注释上方 bind mount 行、
# 取消开下面声明;但此时宿主 docker 无法直接读到 appstore 的 compose 文件,
# 需配合把 GRAW_HOST_DATA 指向该卷在宿主上的实际路径。
# volumes:
# graw-data: