惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
Engineering at Meta
Engineering at Meta
美团技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 司徒正美
I
InfoQ
S
SegmentFault 最新的问题
博客园 - 叶小钗
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
IT之家
IT之家
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
月光博客
月光博客
The Cloudflare Blog
U
Unit 42
GbyAI
GbyAI
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog

Docker

windows 装 docker 哪种方式体验最好? - V2EX 我把最近发布的 localsend CLI 做成了容器 - V2EX quay.io 这服务也太不给力了。 - V2EX Homelab 部署的服务用 latest 还是固定版本? 有啥基于 docker 的类似于微信文件传输助手的东西吗? 有没有什么比较优雅且轻量化的 web 端微信解决方案? V2EX 请问 OrbStack 界面下不能修改参数吗? V2EX mac 上面的 docker desktop 都更新些啥啊 阿里云轻量服务器中拉取 Docker 镜像问题 现在大家如何拉取 Docker 镜像? 轻量级 OCR 文字识别服务 netnr/liteocr 现在官方 docker 拉镜像必须 TUN+全局了吗 请教一下佬们,在使用 1panel 的情况下,有没有必要再部署 Traefik 作为 Docker 统一网关? 创建 docker 镜像时为了防止结束,运行 sleep infinity 和 tail -f /dev/null 哪个更好 2025 年了,大家公司的服务器用的是 debian 还是 ubuntu 呀 Watchtower 停止维护 NAS 上部署自制 docker 程序发生网络连接相关问题 请问下现代的 docker 版本,是无法再使用 centos6.8 这类容器了么? 现在是不推荐使用 阿里云或腾讯云或高校的 dokcer 镜像源吗? 为什么? 一直挂梯子用 docker, 不了解现在的情况了 私有化部署了一套公司的系统,如何有效保护容器里面的文件不被客户拿到 Docker 29.1 不能解析外部 dns 求助 docker 中安装 portainer 不能连接 docker.sock docker ps 显示正在运行,但是服务已经 down 了 公司禁用 Docker V2EX macos 下使用 orbstack 如何才能不挂载目录? Docker 镜像的 UID、GID 管理都这么阴间的么? 请教一个 Docker/Traefik 的网路问题
🐳一键转换 Docker Run 命令和 Docker Compose 配置,实现"一...
BZGOGO · 2026-08-15 · via Docker

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               # 停止并删除容器

💡 本工具是纯静态网页,无数据持久化需求,无需挂载卷。


🎯 使用流程

  1. 粘贴命令 - 从官方文档或 GitHub 复制 Docker Run 命令或 Compose 配置
  2. 点击转换 - 工具自动清理 Shell 变量、转换路径、添加标准配置
  3. 一键部署 - 转换结果分为两部分,各有独立复制按钮:
    • 🚀 一键部署命令:包含目录创建、文件生成、容器启动的完整命令
    • 📄 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


下载备份到本地电脑

使用 FileZillaWinSCP 等 FTP 工具:

  1. 连接到服务器(填写 IP 、用户名 root、密码)
  2. 进入 /root/ 目录
  3. 下载 .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 协议开源。