Compose Tool 🐳
Docker Compose 配置转换工具
->点击打开 Github 项目地址
一键转换 Docker Run 命令和 Docker Compose 配置,实现"一容器一目录"的标准化管理。
🖼️ 界面预览

🔗 在线演示:Compose Tool | Docker 配置转换工具
🏗️ 核心哲学:图纸与材料同屋存放
问题
装了几个 Docker 项目后,各种映射卷零零散散躺在宿主机的各个目录里,极其混乱:
/root/data/ ← 有些项目装这里
/home/user/docker/ ← 有些装这里
/var/lib/myapp/ ← 有些装这里
/tmp/test/ ← 还有些随手放的
解决方案
本工具的目标是把所有 Docker 项目的"图纸"( compose.yaml 配置文件)和"材料"(映射的数据目录)统一存放:
/opt/docker/ ← 统一大目录
├── vaultwarden/ ← 每个容器一个子目录
│ ├── compose.yaml ← 图纸(配置文件)
│ └── vw-data/ ← 材料(容器数据)
├── portainer/
│ ├── compose.yaml
│ └── portainer-data/
├── compose-tool/ ← 本项目自身也遵循此规范
│ └── compose.yaml
└── nextcloud/
├── compose.yaml
└── data/
好处
- 备份极简:备份整个
/opt/docker 目录即可备份所有项目的配置和数据
- 迁移无痛:打包 → 上传到新服务器 → 解压 → 一键启动,完整恢复
- 管理清晰:进入任意子目录执行
docker compose up -d 即可启动对应项目
本工具默认路径为 /opt/docker/{container_name},可通过 VOLUME_PREFIX 环境变量自定义。
✨ 核心特性
特性 |
说明 |
|---|
🔐 100% 隐私安全 |
纯前端实现,所有数据仅在浏览器本地处理,绝不上传 |
🎯 自动路径规范化 |
自动清理 $(pwd)`、`${HOME}、$PWD 等所有 Shell 变量 |
🛡️ 系统路径白名单 |
45+ 系统级挂载(如 /var/run/docker.sock)自动识别保留 |
🔄 双模式支持 |
同时支持 Docker Run 命令和 Docker Compose YAML 配置转换 |
📦 一键部署命令 |
转换结果自动生成完整部署命令,复制粘贴即可执行 |
📱 响应式设计 |
完美适配桌面端和移动端 |
🚀 快速部署
方式一:Docker Run (不推荐)
docker run -d \
--name compose-tool \
--restart unless-stopped \
-p 6688:80 \
-e VOLUME_PREFIX=/opt/docker/{container_name} \
ghcr.io/beacherz/compose-tool:latest
方式二:Docker Compose (推荐,符合本工具理念)
💡 自定义路径说明:
如果不想使用默认的 /opt/docker/ 路径,请在执行前将下面命令中所有的 /opt/docker/ 整体替换为你规划的路径(包括 mkdir 、cd 以及环境变量中的路径)。
mkdir -p /opt/docker/compose-tool && cd /opt/docker/compose-tool && \
cat > compose.yaml << 'EOF'
services:
compose-tool:
image: ghcr.io/beacherz/compose-tool:latest
container_name: compose-tool
restart: unless-stopped
ports:
- "6688:80" # 左边可改为你想要的端口
environment:
- TZ=Asia/Shanghai # 时区
- VOLUME_PREFIX=/opt/docker/{container_name} # 默认卷映射路径,{container_name} 会自动替换为容器名
EOF
docker compose up -d
访问:http://服务器 IP:6688
关于 HTTPS:本工具为纯前端静态页面,所有数据在浏览器本地处理,HTTP 访问完全安全。
如需 HTTPS ,可在前面套一层反向代理(如 Nginx Proxy Manager / Caddy / Traefik ),
将域名指向 服务器 IP:6688 即可。
常用管理命令
cd /opt/docker/compose-tool # 进入项目目录
docker compose logs -f # 查看运行日志
docker compose pull # 拉取最新镜像
docker compose up -d # 重新部署(更新后执行)
docker compose down # 停止并删除容器
💡 本工具是纯静态网页,无数据持久化需求,无需挂载卷。
🎯 使用流程
- 粘贴命令 - 从官方文档或 GitHub 复制 Docker Run 命令或 Compose 配置
- 点击转换 - 工具自动清理 Shell 变量、转换路径、添加标准配置
一键部署 - 转换结果分为两部分,各有独立复制按钮:
- 🚀 一键部署命令:包含目录创建、文件生成、容器启动的完整命令
- 📄 compose.yaml 内容:纯 YAML 配置,适合手动编辑
📖 转换示例
示例 1:Docker Run → Compose
输入
docker run -d --name vaultwarden \
-p 8000:80 \
-v $(pwd)/vw-data:/data \
-e DOMAIN=https://vw.example.com \
vaultwarden/server:latest
输出(一键部署命令)
mkdir -p /opt/docker/vaultwarden && cd /opt/docker/vaultwarden && \
cat > compose.yaml << 'EOF'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
ports:
- "8000:80"
volumes:
- "/opt/docker/vaultwarden/vw-data:/data"
environment:
- "DOMAIN=https://vw.example.com"
restart: unless-stopped
EOF
docker compose up -d
示例 2:官方 Compose → 标准化路径
输入
services:
vaultwarden:
image: vaultwarden/server:latest
volumes:
- ./vw-data:/data
ports:
- 8000:80
输出
mkdir -p /opt/docker/vaultwarden && cd /opt/docker/vaultwarden && \
cat > compose.yaml << 'EOF'
services:
vaultwarden:
image: vaultwarden/server:latest
volumes:
- "/opt/docker/vaultwarden/vw-data:/data"
ports:
- "8000:80"
restart: unless-stopped
EOF
docker compose up -d
示例 3:系统路径自动保留
输入
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/portainer-data:/data \
--name portainer \
portainer/portainer-ce
输出
mkdir -p /opt/docker/portainer && cd /opt/docker/portainer && \
cat > compose.yaml << 'EOF'
services:
portainer:
image: portainer/portainer-ce
container_name: portainer
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "/opt/docker/portainer/portainer-data:/data"
restart: unless-stopped
EOF
docker compose up -d
/var/run/docker.sock 识别为系统路径,自动保留不转换。
💾 备份与迁移
备份单个项目
# 备份 vaultwarden 项目(配置 + 数据)
tar -czf /root/vaultwarden-backup.tar.gz /opt/docker/vaultwarden
压缩包位置:/root/vaultwarden-backup.tar.gz
备份所有项目
# 一次性备份所有 Docker 项目
tar -czf /root/docker-all-backup.tar.gz /opt/docker
压缩包位置:/root/docker-all-backup.tar.gz
下载备份到本地电脑
使用 FileZilla 或 WinSCP 等 FTP 工具:
- 连接到服务器(填写 IP 、用户名
root、密码)
- 进入
/root/ 目录
- 下载
.tar.gz 压缩包到本地电脑
恢复单个项目
# 在新服务器上传压缩包到`/root/` 目录后执行
tar -xzf /root/vaultwarden-backup.tar.gz -C /
# 进入目录启动容器
cd /opt/docker/vaultwarden
docker compose up -d
迁移所有项目到新服务器
第 1 步:新服务器安装 Docker
curl -fsSL https://get.docker.com | sh
第 2 步:上传压缩包到新服务器
使用 FTP 工具将本地的 docker-all-backup.tar.gz 上传到新服务器的 /root/ 目录。
第 3 步:解压并还原目录结构
# 在新服务器执行
tar -xzf /root/docker-all-backup.tar.gz -C /
解压后目录结构自动恢复:
/opt/docker/
├── vaultwarden/
│ ├── compose.yaml
│ └── vw-data/
├── portainer/
│ ├── compose.yaml
│ └── portainer-data/
├── compose-tool/
│ └── compose.yaml
└── ...
第 4 步:一键启动所有容器
for dir in /opt/docker/*/; do
echo "正在启动: $dir"
(cd "$dir" && docker compose up -d)
done
🔧 高级配置
修改默认卷映射路径
编辑服务器上的 compose.yaml,修改 VOLUME_PREFIX 环境变量:
- VOLUME_PREFIX=/你的新路径/{container_name}
重启容器:
cd /opt/docker/compose-tool
docker compose up -d --force-recreate
自定义端口
编辑 compose.yaml:
ports:
- "你的端口:80"
更新到最新版本
cd /opt/docker/compose-tool
docker compose pull
docker compose up -d
🛡️ 系统路径白名单
以下路径自动识别保留,不做转换:
分类 |
路径示例 |
|---|
Docker |
/var/run/docker.sock、/var/lib/docker、/usr/bin/docker |
内核/设备 |
/proc、/sys、/dev、/boot、/lib/modules |
系统配置 |
/etc/localtime、/etc/hosts、/etc/resolv.conf、/etc/timezone |
SSL 证书 |
/etc/ssl、/etc/pki、/etc/ca-certificates |
用户/组 |
/etc/passwd、/etc/group、/etc/shadow、/etc/gshadow |
完整白名单包含 45+ 路径,覆盖所有常见系统级挂载。
📜 开源协议
本项目采用 MIT License 协议开源。