Docker Run转Compose 在线生成配置
docker run转Compose:从docker run命令生成compose.yml,自动提取端口、卷、环境变量和网络配置,适合容器化迁移。
更新于 2026-08-16
相关工具
功能特性
- 即时转换:粘贴 docker run 命令,实时生成有效的 Compose v3 docker-compose.yml
- 支持所有常用参数:-p、-v、-e、--name、--restart、--net、--rm、-d,单条命令可含多个 -e 环境变量
- 支持命名卷、绑定挂载和卷选项(如 :ro 只读挂载)
- 映射多种网络模式:bridge、host、none 及自定义网络名称
- 保留容器命名(container_name),方便识别和管理
- 处理镜像标签和摘要:nginx:latest、postgres:14、ubuntu@sha256:abc123...
- 一键复制到剪贴板,一键下载为 docker-compose.yml 文件
- 支持 docker create、docker container run、podman run 等命令前缀
- 显示解析后的参数摘要,复制前可验证提取结果
- 可选 Compose 版本:Latest、v3.x 或 v2.x,并调整 YAML 缩进(2 或 4 空格)
- 合并到现有 docker-compose.yml:粘贴已有文件并追加新服务
- 纯浏览器本地处理,docker 命令绝不上传到服务器
使用方法
- 1在输入区域粘贴 docker run 命令:docker-compose YAML 输出即时生成
- 2工具自动识别命令前缀:docker run、docker create、docker container run 或 podman run
- 3检查参数摘要面板,确认从命令中提取了哪些选项
- 4点击复制按钮,将生成的 docker-compose.yml 复制到剪贴板
- 5使用保存按钮将输出下载为 docker-compose.yml 文件
- 6使用清除按钮重置输入和输出,开始新的转换
- 7点击输入框下方的示例按钮,查看常见转换场景
- 8支持多行命令:工具能处理反斜杠续行和多余空白
- 9对于多个容器,分别粘贴每个 docker run 命令并手动合并输出
- 10使用工具栏的版本切换选择 Latest、v3.x 或 v2.x Compose 格式
- 11使用缩进切换选择 2 或 4 空格的 YAML 缩进
- 12点击「合并到现有 compose 文件」粘贴已有的 docker-compose.yml 并追加新服务
常见问题
什么是 docker run 转 docker-compose 转换?
它将 docker run CLI 命令转换为 docker-compose.yml 配置文件。不再需要编写冗长的 docker run 命令,而是获得一个结构化的 YAML 文件,定义容器的镜像、端口、卷、环境变量等设置。这使得容器配置更易管理、版本控制和团队共享。
支持哪些 docker run 参数?
工具支持所有常用参数:-d(后台运行)、--name(容器名)、-p/--publish(端口映射)、-v/--volume(卷挂载)、-e/--env(环境变量)、--restart(重启策略)、--net/--network(网络模式)、--rm(自动移除)、--hostname、-w(工作目录)、--entrypoint、-u(用户)、-l(标签)、--add-host、--dns、-m(内存限制)、--cpus 等。
能转换 docker create 命令吗?
可以。工具识别 docker run、docker create、docker container run 和 podman run 作为输入前缀。转换逻辑相同,因为 docker create 和 docker run 共享相同的参数语法。
生成的是 Compose v2 还是 v3 格式?
工具提供三种输出版本可选:Latest(通用规范,推荐)、v3.x 和 v2.x,不同版本影响是否包含 version 字段以及格式细节。默认的 Latest 输出兼容 Docker Compose v2.x 和 v3.x,且不包含 version 字段,由现代 Docker Compose 自动推断版本,这也是官方 Docker 文档推荐的方式。
卷挂载是怎么转换的?
绑定挂载如 -v /host/path:/container/path 会成为 compose 文件中的 volumes 条目。命名卷如 -v mydata:/var/lib/data 会被识别并列在服务 volumes 和顶层 volumes 部分。只读挂载(-v ./data:/app/data:ro)会保留 :ro 标志。
支持带多个参数的命令吗?
完全可以。你可以粘贴包含任意参数组合的单条 docker run 命令:端口、卷、环境变量、网络设置、重启策略、标签等。所有参数都会被提取并映射到对应的 compose 等效项。
不支持的参数会怎么处理?
如果某个参数没有直接的 compose 等效项(如 --privileged 或 --cap-add),工具会在参数摘要中标注出来。你可以手动在 compose 文件中添加 extra_hosts、cap_add 等扩展字段。
转换后生成的 docker-compose.yml 怎么运行?
把输出保存为项目目录下的 docker-compose.yml,然后执行 docker compose up -d 即可在后台启动服务。想先预览生效配置,可以运行 docker compose config 校验文件,它会输出解析后的完整配置,或直接指出 YAML 错误位置。使用旧版独立命令的环境则用 docker-compose up -d。
为什么 compose 启动后容器网络或主机名和 docker run 不一样?
默认情况下 docker compose 会为项目创建独立的 bridge 网络,并把服务名作为主机名;而 docker run 使用默认 bridge 网络,主机名是随机容器 ID。如果命令用了 --net host 或自定义网络,转换结果会映射到 compose 的 network 段;自定义网络不存在时需要先用 docker network create 创建,否则 docker compose up 会报网络错误。
能把 docker-compose.yml 转回 docker run 吗?
此工具仅支持 docker run → compose 方向的转换。反向转换(compose → docker run)可以使用 Decomposerize 工具。很多开发者根据需求在两个方向上交替使用。
为什么用 docker-compose.yml 而不是 docker run?
docker-compose.yml 有诸多优势:可通过 Git 版本控制、方便团队共享、一条命令启停整个应用栈、依赖管理(depends_on)、网络隔离、开发/测试/生产环境一致性。它是多容器应用的标准配置方式。
支持包含特殊字符的环境变量吗?
支持。包含等号、空格或特殊字符的环境变量在 YAML 输出中会被正确加引号。例如 -e DATABASE_URL='postgres://user:pass@host/db?sslmode=require' 会被正确转换并保留值。
能在手机上使用吗?
可以在移动浏览器上使用。但为了获得最好体验(尤其是长命令),推荐使用桌面浏览器,方便粘贴多行命令并排查看输出。
怎么把 docker run 命令追加到已有的 compose 文件?
点击工具栏的「合并到现有 compose 文件」,粘贴已有的 docker-compose.yml 内容,然后输入 docker run 命令。工具会自动将新服务合并到已有配置中,保留原有的服务、卷和网络定义。
缩进可以调整吗?
可以。工具栏提供 2 和 4 两种缩进选项。默认为 4 空格缩进,选择 2 可以生成更紧凑的 YAML 输出。
转换后用 docker compose up 启动,容器立刻退出了,为什么?
一次性容器就是这样:docker run --rm alpine echo hi 启动、打印、退出,compose 忠实地复现了这个行为,进程结束服务就停止。一次性任务请改用 docker compose run <服务> 而不是 up,它才等价于 docker run。如果容器本应常驻,检查镜像的入口命令是否长期运行,以及你是不是误转换了一条带 --rm 的一次性命令。
密码或配置里带 $ 符号,转换后值变了,为什么?
compose 在启动时会插值文件里的 $VAR 引用,所以值里字面的 $(比如密码、JDBC URL)在 compose 中要写成 $$。工具只会保证 YAML 语法上的引号正确,无法判断哪些 $ 是你想要的字面量。转换后把值中真正的 $ 替换成 $$,或者干脆别把密钥写进 compose 文件,改用 .env 文件传入。