
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
https://img.shields.io/docker/pulls/shirom/pihole-sync.svg?style=for-the-badge&logo=github](https://hub.docker.com/repository/docker/shirom/pihole-sync)
Pihole作为网络核心,一旦故障会导致整个网络瘫痪。为解决此问题,通常部署冗余Pihole,但需避免在两个设备上重复配置。本Docker容器实现两个Pihole间的同步,采用主从模式(未来将支持更多节点),只需更新主Pihole,从Pihole会自动同步。支持同步/etc/pihole/和/etc/dnsmasq.d/目录(排除客户端独立目录),基于Alpine 3.12构建,集成dumb-init、openssh、rsync、inotify-tools和bash,镜像体积约28MB。
通过在主Pihole部署sender容器、从Pihole部署receiver容器,解决SSH权限问题:sender容器仅SSH到receiver容器而非主机,即使容器被入侵,***者也仅能访问接收容器及其挂载卷,保障安全性。
注意:若接收端Pihole未运行在Docker中,或可接受给接收端开放root权限(降低安全性),则无需使用接收容器。
适用于Docker环境,可通过docker-compose统一管理,确保整个项目通过docker-compose up启动、docker-compose down停止,无需在Docker外运行独立同步脚本。
监控指定目录变化,实时同步至其他Pihole,更新白名单等配置后可立即生效。
不仅同步列表,还包括密码、上游DNS设置等所有配置,确保主从Pihole完全一致。
不同于pihole-cloudsync,无需同步至代码仓库,避免Pihole连接互联网,也不会在Github产生大量提交记录,保护隐私和仓库整洁。
注意:主Pihole需能SSH连接到从Pihole。若存在网络限制(如Pihole位于不同***后),建议使用
pihole-cloudsync。
主Pihole(sender节点)docker-compose.yml
yamlpihole: image: docker.xuanyuan.run/pihole/pihole:latest volumes: - /mnt/ext/pihole/etc-pihole:/etc/pihole - /mnt/ext/pihole/etc-dnsmasq.d:/etc/dnsmasq.d # 其他Pihole配置... pihole-sync-sender: image: docker.xuanyuan.run/shirom/pihole-sync:latest container_name: pihole-sync-sender volumes: - /mnt/ext/piholesync/root:/root - /mnt/ext/pihole/etc-pihole:/mnt/etc-pihole:ro - /mnt/ext/pihole/etc-dnsmasq.d:/mnt/etc-dnsmasq.d:ro environment: - "NODE=sender" - "REM_HOST=(远程Pi的IP地址)" - "REM_SSH_PORT=22222"
从Pihole(receiver节点)docker-compose.yml
yamlpihole: image: docker.xuanyuan.run/pihole/pihole:latest volumes: - /mnt/ext/pihole/etc-pihole:/etc/pihole - /mnt/ext/pihole/etc-dnsmasq.d:/etc/dnsmasq.d # 其他Pihole配置... pihole-sync-receiver: image: docker.xuanyuan.run/shirom/pihole-sync:latest container_name: pihole-sync-receiver volumes: - /mnt/ext/piholesync/root:/root - /mnt/ext/piholesync/etc-ssh:/etc/ssh - /mnt/ext/pihole/etc-pihole:/mnt/etc-pihole - /mnt/ext/pihole/etc-dnsmasq.d:/mnt/etc-dnsmasq.d environment: - "NODE=receiver" ports: - 22222:22
| 卷路径 | 功能 |
|---|---|
/mnt/ext/piholesync/root | 存储SSH密钥和已知主机文件,需持久化 所有节点必填 |
/mnt/ext/piholesync/etc-ssh | 存储SSH服务器密钥和守护进程配置,需持久化(可使用卷而非绑定路径) 仅sender节点必填 |
/mnt/ext/pihole/etc-pihole | Pihole容器在主机上的/etc/pihole/目录,用于监控和同步,需与Pihole容器内/etc/pihole/路径一致所有节点必填,sender节点可设为只读(ro) |
/mnt/ext/pihole/etc-dnsmasq.d | Pihole容器在主机上的/etc/dnsmasq.d/目录,用于监控和同步,需与Pihole容器内/etc/dnsmasq.d/路径一致所有节点必填,sender节点可设为只读(ro) |
| 变量 | 功能 |
|---|---|
NODE | 定义容器角色,sender(主)或receiver(从)所有节点必填 |
REM_HOST | 远程Pi的IP地址(或FQDN/主机名) 仅sender节点必填 |
REM_SSH_PORT | 远程SSH端口(非标准端口),默认22222。若修改,需同步修改receiver节点的端口映射 仅sender节点必填 |
| 端口 | 功能 |
|---|---|
22222 | SSH/rsync暴露端口,避免与主机22端口冲突,默认22222。若修改,需同步修改sender节点的REM_SSH_PORT参数仅receiver节点必填 |
docker exec -it pihole-sync /bin/bashdocker logs pihole-syncauthorized_keys文件。例如,若receiver的/root卷挂载为/docker/config/piholesync/root:/root,则创建文件/docker/config/piholesync/root/.ssh/authorized_keys。authorized_keys文件:
####### COPY BELOW THIS LINE, BUT NOT THIS LINE ######## /root/.ssh/id_ed25519.pub ####### COPY ABOVE THIS LINE, BUT NOT THIS LINE ########
如需本地修改或开发,可执行以下命令构建镜像:
bashdocker buildx build --platform linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7 --tag shirom/pihole-sync --output type=image,push=false .
多架构构建需安装QEMU。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务