最近我花了很多时间把我的服务栈迁移到 Dokploy,这个平台确实很棒,但当我想在 Compose 服务里挂载特定的配置文件时,还是遇到了一点瓶颈。这些文件在主机上到底存放在哪里,并不是一眼就能看出来,所以经过一番试错后,我想把解决方法记录在这里,供其他遇到同样问题的人参考。
使用 Dokploy 时,“Compose”服务类型提供了极大的灵活性,让你可以通过 docker-compose.yml 文件定义服务栈。不过,当你需要使用 Dokploy 内置的 Advanced Settings -> Mount Volume 功能来挂载特定配置文件(例如 .ini、.json 或 .conf)时,常常会让人感到困惑。

需要注意的是,对于 Compose 类型的服务,只支持 FILE 挂载类型。在本指南中,我们会探讨 Dokploy 如何存储这些文件,以及如何在 Docker Compose 配置中正确引用它们,以确保你的设置持久且安全。
挑战:挂载的文件在哪里?
在标准的 Dokploy “Application”中,文件挂载由平台的内部逻辑自动处理。但在 Compose 服务中,Dokploy 并不会直接管理容器的创建——它会按照你在 YAML 文件中定义的指令执行。

如果你进入服务的 Advanced 标签页,并创建一个类型为 FILE 的挂载,Dokploy 会把该内容保存到主机系统上。由于 compose 类型不会直接创建应用,你需要确切知道 Dokploy 把这些文件存放在哪里,才能在卷映射中正确引用它们。
关键要素:../files/
Dokploy 在主机上使用特定的目录结构来组织 Compose 服务的内部存储:
- 代码目录:
/etc/dokploy/compose/[service-id]/code(你的docker-compose.yml存放的位置)。 - 文件目录:
/etc/dokploy/compose/[service-id]/files(在仪表板中设置的文件挂载存放的位置)。
由于 docker-compose 命令是在 code 目录中执行的,你必须向上一级(..)才能访问已挂载的文件。这是成功实现 Dokploy 卷挂载的关键。
实现示例:PHP 与 OpenClaw

假设你想为 PHP 服务挂载一个自定义的 uploads.ini,或者为 OpenClaw 挂载一个配置文件(使用 coollabsio/openclaw:2026.3.23 镜像)。
- 在 Dokploy 仪表板中: 前往你的 Compose 服务 -> Advanced -> Mounts。
- 创建挂载:
- 类型: FILE
- 名称:
uploads.ini(或openclaw.json) - 内容: 在此粘贴你的配置设置。
- 在你的
docker-compose.yml中:
services:
app:
image: coollabsio/openclaw:2026.3.23
volumes:
# Use the ../files/ prefix to reach the Dokploy-managed file
- ../files/openclaw.json:/data/.openclaw/openclaw.json:ro
为什么要使用 :ro(只读)?
出于安全性和数据完整性的考虑,强烈建议在卷定义中追加 :ro。将挂载标记为只读,可确保你的应用不会意外覆盖应该通过 Dokploy 仪表板管理的配置文件。
在我的测试中,通过 Dokploy 仪表板更新文件会立即反映到主机系统上。不过,如果你的应用从容器内部修改了该文件,这些更改不会同步回仪表板 UI。为了避免“单一事实来源”冲突,请始终使用 :ro。
关于缓存的重要说明
虽然在 Dokploy 中保存后,磁盘上的文件会立即更新,但如果你的应用在启动时缓存配置,它可能不会看到这些更改。如果你更新了像 openclaw.json 这样的文件,可能需要重启服务,以确保新内容反映到正在运行的进程中。
总结清单
- 在 Dokploy 的 Advanced 标签页中定义文件。
- 在 YAML 中使用
../files/前缀引用该文件。 - 使用
:ro让配置管理保持集中且安全。
相关阅读:想找绝对最快的方式来托管你的网站?看看我这篇关于在 Dokploy 上使用 OpenLiteSpeed 释放 WordPress 性能的指南。

发表回复
要发表评论,您必须先登录。