Wanzul Blog

Notes, opinions, and lessons I paid for.

Dokploy Compose: How to Mount Files Correctly (Step-by-Step)

Dokploy Compose:如何正确挂载文件(分步指南)

最近我花了很多时间把我的服务栈迁移到 Dokploy,这个平台确实很棒,但当我想在 Compose 服务里挂载特定的配置文件时,还是遇到了一点瓶颈。这些文件在主机上到底存放在哪里,并不是一眼就能看出来,所以经过一番试错后,我想把解决方法记录在这里,供其他遇到同样问题的人参考。

使用 Dokploy 时,“Compose”服务类型提供了极大的灵活性,让你可以通过 docker-compose.yml 文件定义服务栈。不过,当你需要使用 Dokploy 内置的 Advanced Settings -> Mount Volume 功能来挂载特定配置文件(例如 .ini、.json 或 .conf)时,常常会让人感到困惑。

Dokploy Advanced Settings Mount Volume
在 Advanced 标签页中,你可以轻松定义 FILE 类型的挂载。

需要注意的是,对于 Compose 类型的服务,只支持 FILE 挂载类型。在本指南中,我们会探讨 Dokploy 如何存储这些文件,以及如何在 Docker Compose 配置中正确引用它们,以确保你的设置持久且安全。

挑战:挂载的文件在哪里?

在标准的 Dokploy “Application”中,文件挂载由平台的内部逻辑自动处理。但在 Compose 服务中,Dokploy 并不会直接管理容器的创建——它会按照你在 YAML 文件中定义的指令执行。

Dokploy Compose Service Directory Structure
理解 /code 与 /files 之间的关系是关键。

如果你进入服务的 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

Docker Compose Volume Mapping Example
将 /files 内容映射到容器中的示例。

假设你想为 PHP 服务挂载一个自定义的 uploads.ini,或者为 OpenClaw 挂载一个配置文件(使用 coollabsio/openclaw:2026.3.23 镜像)。

  1. 在 Dokploy 仪表板中: 前往你的 Compose 服务 -> Advanced -> Mounts。
  2. 创建挂载:
    • 类型: FILE
    • 名称: uploads.ini(或 openclaw.json)
    • 内容: 在此粘贴你的配置设置。
  3. 在你的 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 这样的文件,可能需要重启服务,以确保新内容反映到正在运行的进程中。

总结清单

  1. 在 Dokploy 的 Advanced 标签页中定义文件。
  2. 在 YAML 中使用 ../files/ 前缀引用该文件。
  3. 使用 :ro 让配置管理保持集中且安全。

相关阅读:想找绝对最快的方式来托管你的网站?看看我这篇关于在 Dokploy 上使用 OpenLiteSpeed 释放 WordPress 性能的指南。

Wan Zulkarnain 的头像

Written by 

Comments

发表回复