文件管理器
Files 选项卡用于浏览应用运行中容器的文件系统。它适合检查和小修改,不适合导入或导出数据。
它是什么
每个操作都会在运行中的容器内执行一条命令(ls、head、tee、touch、mkdir -p、rm -rf),使用容器自身的用户。您看到的容器与应用看到的完全一致,包括挂载。
Warning
在挂载卷之外所做的修改只存在于当前容器中。下一次部署会从镜像启动新容器,修改随之消失。要保留文件,请将其放在 Volumes 挂载中,或修改代码后重新部署。
使用 Files 选项卡
- 打开应用并进入 Files 选项卡。目录树从
/开始;Refresh 重新读取当前目录。每个条目显示大小、日期和 Permissions(只读)。 - 点击文件即可显示。二进制内容不会显示。
- Edit 后 Save,会用编辑器中的文本重写该文件。
- New File 在当前目录创建空文件,New Folder 创建目录。
- Delete 经确认后删除文件,或删除目录及其全部内容。
- 对于包含多个服务的应用,可用选择器选择容器;默认是主容器。
API
通过 API 执行相同操作(真实响应):
$ curl -s -H "Authorization: Bearer $SH0_TOKEN" "https://panel.example.com/api/v1/apps/<app-id>/browse?path=/app"
{"data":{"entries":[{"file_type":"file","modified":"1970-01-01 00:00:00","name":"server.js","permissions":"-rw-r--r--","size":"182"}],"path":"/app"}}
$ curl -s -X PUT -H "Authorization: Bearer $SH0_TOKEN" -H "Content-Type: application/json" \
-d '{"path":"/app/notes/todo.txt","content":"hello from sh0\n"}' \
https://panel.example.com/api/v1/apps/<app-id>/file
{"data":{"path":"/app/notes/todo.txt","written":true}}
$ curl -s -H "Authorization: Bearer $SH0_TOKEN" "https://panel.example.com/api/v1/apps/<app-id>/file?path=/app/notes/todo.txt"
{"data":{"content":"hello from sh0\n","path":"/app/notes/todo.txt"}}GET /api/v1/apps/<id>/browse?path=…-- 列出目录。GET /api/v1/apps/<id>/file?path=…读取文件;在同一路由上用PUT并提供path和content即可写入。POST /api/v1/apps/<id>/files/mkdir和POST …/files/new,提供path-- 创建目录或空文件。DELETE /api/v1/apps/<id>/files?path=…-- 删除。/、/bin、/etc、/usr、/lib、/lib64、/sbin、/proc、/sys、/dev和/boot本身会被拒绝(“Cannot delete protected system directory”)。- 路径必须是绝对路径且不能包含
..。读取需要在应用所属项目上拥有 viewer 角色;写入、创建和删除需要 developer 角色。
不支持的功能
- 不支持上传。没有从本地电脑发送文件的接口;
POST …/files/upload返回 404。 - 不支持下载或打包。无法下载文件,也无法将目录打包下载;
GET …/files/download返回 404。 - 不能修改权限或属主。权限仅显示,不可编辑。
这些操作请在服务器上完成:在主机与容器之间使用 docker cp,或直接在主机上的卷目录中操作(见 卷与挂载)。在服务器本机上,sh0 ssh <app> 可在容器中打开 shell(见 终端访问)。
限制与注意事项
- 读取上限 1 MB。读取最多返回文件的前 1,048,576 字节,且不会提示已截断。不要在 Files 选项卡中编辑并保存更大的文件:保存后的文件将只剩前 1 MB。
- 镜像必须提供这些工具。没有 shell 工具集的镜像(distroless、scratch)缺少
ls或tee,文件管理器无法在其中工作。 - 删除是递归且不可恢复的。没有回收站。
- 容器必须在运行。已停止的应用没有可浏览的容器。