-
Notifications
You must be signed in to change notification settings - Fork 0
Docker Compose
🧭 页面导航: Linux 部署方式 · 配置说明 · 故障排查 · Wiki 首页
Docker Compose 使用一个 compose.yaml 文件描述容器镜像、网络和目录挂载,然后通过 docker compose 命令统一启动、停止或更新容器。本页提供完整示例,不需要自行编写 Compose 文件。
正式镜像只发布 linux/amd64 和 linux/arm64。开始前,准备 Mihomo 控制接口地址和可选密钥,并把 Mihomo 日志级别设为 info 或更详细。不了解这些信息时,先阅读配置说明:Mihomo 控制接口是什么。
下面的示例使用:
- 普通 Docker Engine,不是 Rootless 模式;
- 宿主机网络;
- 固定的 Linux 用户和组编号
10001:10001。
使用宿主机网络后,容器可以直接连接只监听在宿主机 127.0.0.1:9090 的 Mihomo。Rule-Bot Client 本身不对外监听端口。
Warning
以下 docker compose 命令需要由有权使用 Docker 后台服务的账户执行。否则,应按本机 Docker 的安装方式在命令前使用 sudo。不要为了运行这些命令而随意放宽 Docker socket 权限。能够控制 Docker 后台服务,通常也意味着能够取得主机上的高权限。
Note
进阶环境提醒: Rootless Docker、启用 userns-remap,或者启用 SELinux 强制策略的主机,需要按实际环境调整用户和组编号映射,或调整目录挂载标签。不能直接照用下面的权限值。
以下命令从当前正式版本 v0.3.3 取得配置示例和 Compose 文件。Compose 使用 latest 镜像,适合跟随最新稳定版;开始前仍应对照最新正式版本页面。
release='v0.3.3'
sudo install -d -m 0755 /opt/rule-bot-client
sudo install -d -o 10001 -g 10001 -m 0750 /opt/rule-bot-client/data
curl -fsSL \
"https://raw.githubusercontent.com/Aethersailor/Rule-Bot-Client/$release/deploy/docker/config.json" \
-o /tmp/rule-bot-client-config.json
sudo install -o root -g 10001 -m 0640 \
/tmp/rule-bot-client-config.json /opt/rule-bot-client/config.json
rm /tmp/rule-bot-client-config.json
curl -fsSL \
"https://raw.githubusercontent.com/Aethersailor/Rule-Bot-Client/$release/deploy/docker/compose.yaml" \
-o /tmp/rule-bot-client-compose.yaml
sudo install -m 0644 \
/tmp/rule-bot-client-compose.yaml /opt/rule-bot-client/compose.yaml
rm /tmp/rule-bot-client-compose.yaml容器使用 Linux 用户和组编号 10001:10001 运行。不要跳过目录所有者和配置权限设置,否则容器可能无法读取配置或写入结果。
sudo editor /opt/rule-bot-client/config.json示例中的路径已经与 Compose 目录挂载匹配:
- 容器读取
/data/config.json; - 域名结果写入
/data/data/domains.txt; - 对应的宿主机结果文件是
/opt/rule-bot-client/data/domains.txt。
Mihomo 位于其他设备时,把 instances 中的 url 改为那台设备的控制接口地址。Mihomo 没有设置 secret 时,可以删除该字段。首次安装保持 rule_bot.enabled=false,先验证本地收集。
cd /opt/rule-bot-client
docker compose config --quiet
docker compose run --rm rule-bot-client --config /data/config.json --check
docker compose up -d
docker compose ps
docker compose logs --tail=100docker compose config --quiet 检查 Compose 文件。随后运行的 --check 检查 Rule-Bot Client 配置、凭据和证书文件,但不测试 Mihomo 网络连接。
启动后,日志中应出现 instance=... connected,表示对应监听目标已经连接。然后访问一个此前未收集的域名,并在 Mihomo 管理面板或日志中确认它最终由兜底规则 MATCH 处理。
等待最长一个刷新间隔,再检查本地结果:
sudo cat /opt/rule-bot-client/data/domains.txt先拉取最新稳定镜像并检查配置,再重建容器:
cd /opt/rule-bot-client
docker compose config --quiet
docker compose pull
docker compose run --rm rule-bot-client --config /data/config.json --check
docker compose up -d
docker compose ps
docker compose logs --tail=100更新后确认日志出现 instance=... connected,并再次检查本地域名清单。现有 config.json 和数据目录不会被覆盖。
需要无人值守更新时,建议部署 nicholas-fedor/watchtower。它适合家庭服务器、NAS 和本地环境。Rule-Bot Client 的镜像必须保持为 ghcr.io/aethersailor/rule-bot-client:latest;固定版本标签不会自动前移。
在 /opt/rule-bot-client/compose.watchtower.yaml 中保存:
services:
rule-bot-client:
labels:
- com.centurylinklabs.watchtower.enable=true
watchtower:
image: nickfedor/watchtower:latest
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 3600 --cleanup --label-enable启动并检查:
cd /opt/rule-bot-client
docker compose -f compose.yaml -f compose.watchtower.yaml up -d
docker compose -f compose.yaml -f compose.watchtower.yaml ps
docker compose -f compose.yaml -f compose.watchtower.yaml logs --tail=100 watchtowerWatchtower 每小时检查一次,并且只处理明确带有启用标签的 Rule-Bot Client;主机上的其他容器不会被纳入。发现新镜像后,它会重新创建容器并清理旧镜像。挂载的配置和数据目录不受影响。更新后仍应检查 Rule-Bot Client 日志中的 instance=... connected 和本地域名清单。
Warning
/var/run/docker.sock 允许容器控制 Docker,通常等同于主机高权限。不要把 Watchtower 暴露到公网,也不要在不信任的主机或商业生产环境中照搬此方案。
cd /opt/rule-bot-client
docker compose run --rm rule-bot-client --version输出包含版本、源码提交和构建时间。
需要停止并删除容器,但保留配置和域名数据时,执行:
cd /opt/rule-bot-client
docker compose down数据保存在宿主机目录 /opt/rule-bot-client。docker compose down 不会删除这个目录。
如果确认以后不再使用这些配置和数据,需要另外检查、备份并清理 /opt/rule-bot-client。不要在没有检查内容时直接删除整个目录。