Docker上线协同办公平台的核心是“打包—连接—固化—暴露”四步:用官方镜像(如onlyoffice/documentserver、mysql:8.0)确保可靠,通过docker-compose.yml声明服务名实现容器间通信(如http://onlyoffice:80),显式挂载数据路径保障持久化,再以Caddy反向代理统一入口并自动配置HTTPS。

用Docker上线协同办公平台,核心是把服务“打包—连接—固化—暴露”四个动作做扎实。不靠手动装环境、配PHP或调Nginx,而是用标准化镜像和声明式编排,让整个过程可复现、易维护、能落地。
选对镜像,避开非官方陷阱
镜像是起点,直接决定后续是否省心。优先选官方或高星可信源:
- OnlyOffice:用 onlyoffice/documentserver(仅文档服务),不是 community-server(含完整管理后台,资源开销大);
- DzzOffice:认准 GitHub 上活跃更新的镜像,比如 zhangchunsheng/dzzoffice 或基于 Alpine+PHP8 的轻量构建版;
- 数据库:MySQL 官方镜像(mysql:8.0)或 PostgreSQL(postgres:15),避免用带魔改启动脚本的第三方版本;
- 反向代理:Caddy v2 镜像(caddy:2)比 Nginx 更适合新手——自动 HTTPS、配置简洁,一行域名就能反代。
用 docker-compose 编排服务关系
协同办公不是单个容器的事,而是多个服务协同工作。docker-compose.yml 是你的“系统蓝图”,关键点在于:
- 服务名即网络内域名:DzzOffice 调 OnlyOffice 时,地址写 http://onlyoffice:80,不是 localhost 或 127.0.0.1;
- 数据库连接地址写 mysql(服务名),端口固定用 3306,不要映射到宿主机;
- OnlyOffice 的回调地址(callbackUrl)必须设为外网可访问的域名,例如 https://office.yourdomain.com,否则编辑后无法回传文件;
- 所有服务统一时区:在每个 service 下加 environment: - TZ=Asia/Shanghai,避免日志和定时任务错乱。
数据持久化不能只靠默认卷
容器重启即丢数据,这是新手最常踩的坑。必须显式挂载关键路径:
- MySQL:挂载 /var/lib/mysql 到宿主机目录或命名卷,如 mysql_data:/var/lib/mysql;
- OnlyOffice:至少挂载 /app/onlyoffice/DocumentServer/data(用户上传缓存)、/app/onlyoffice/DocumentServer/logs(排错必需);
- DzzOffice:挂载 /var/www/html/data(用户文件)、/var/www/html/config(数据库配置、插件设置);
- SSL 证书:Caddy 自动申请的证书存在 /data/caddy,必须挂载,否则每次重启都重签,容易触发 Let’s Encrypt 限频。
反向代理与 HTTPS 是上线前提
没有域名和 HTTPS,平台等于没对外发布。别暴露容器端口到公网,而是走统一入口:
- 用 Caddy 配置示例:
office.yourdomain.com {
reverse_proxy http://dzzoffice:80
reverse_proxy /coauthoring/ http://onlyoffice:80/coauthoring/
reverse_proxy /ConvertService.ashx http://onlyoffice:80/ConvertService.ashx
} - OnlyOffice 的前端集成路径(如
/coauthoring)必须在反代中显式透传,否则协同编辑白屏; - DzzOffice 后台里“OnlyOffice 设置”中的服务器地址,填的是你对外的域名(https://office.yourdomain.com),不是容器内部地址;
- 首次访问前,确保域名已解析到服务器 IP,且防火墙放行 443 端口。


















