Docker搭消息推送系统核心是稳推、准收、可控管,关键在隔离清、配置挂载对、端口协议齐;轻量选Gotify/Apprise/Go-WXPush,禁用重企业栈;必挂载配置与数据目录;网络限本机+反代鉴权;须端到端实测+查日志。

用Docker搭消息推送系统,核心不是“能不能跑起来”,而是“推得稳、收得到、管得住”。真正落地时,90%的问题出在服务隔离没做清、配置没挂载对、端口或协议没对齐——而不是代码写错了。
选对轻量级服务,别一上来就堆微服务
小团队或个人项目,不建议直接上RabbitMQ+Nacos+XXL-JOB这套企业级组合。它稳定但重,调试成本高,且多数场景根本用不到延迟队列或分片调度。
- 优先考虑 Gotify:单二进制+SQLite,Docker镜像仅40MB,5分钟可上线,自带Web管理页和安卓/iOS客户端
- 需要多平台(邮件/Telegram/钉钉)统一出口?选 Apprise:靠一行URL配通道,支持65+服务,Docker启动后浏览器点点就配好
- 要微信原生弹窗提醒?Go-WXPush更合适:基于测试公众号,免认证、零月费,API直调,发一条只耗1次额度
配置必须挂载,别让数据困在容器里
Docker默认删容器=删所有数据。消息系统一旦崩溃重装,历史记录、用户Token、模板配置全丢——这不是故障,是部署失误。
- Gotify:必须挂载
/app/config.yml和/app/data目录,否则重启后密码变回admin/admin - Apprise:
/config目录存服务URL列表,改配置不用重打镜像,reload页面即生效 - Go-WXPush:
-base_url参数务必填你的真实域名/IP,否则微信点击跳转会失败
网络与权限要收口,尤其对外暴露时
很多推送服务默认监听 0.0.0.0:80 或 :8080,直接映射到公网等于把控制台敞开。更隐蔽的风险是:你的告警服务和NAS、Home Assistant跑在同一台机器,没设网络隔离,一个漏洞可能横向打穿全家桶。
- 用
-p 127.0.0.1:8080:80限制只允许本机访问,再通过Nginx反向代理加HTTPS和基础鉴权 - Docker Compose中为每个服务设独立网络(
networks:),避免Redis、RabbitMQ被推送服务以外的容器直连 - Gotify等带Web界面的服务,首次登录后立即改密;Apprise管理页建议关掉或加Nginx Basic Auth
验证不能只看“容器running”,要测端到端链路
运行 docker ps 显示绿色状态,不代表能用。必须模拟真实调用路径走通一次:
- 用
curl -X POST "http://IP:8080/message?token=xxx" -F "title=test" -F "message=ok"发条测试通知 - 手机装对应客户端(如Gotify安卓版),扫码添加服务器,确认收到弹窗
- 查日志:
docker logs -f 容器名,重点看是否有连接拒绝、数据库初始化失败、Token校验不通过等报错

















