docker run 转 compose
逐 flag 解析 docker run 命令,生成 compose 服务片段。
使用说明
这个工具解决什么问题
GitHub README 里的启动命令都是 docker run 一长串,搬进 compose 要逐个 flag 翻译:-p 对 ports、-e 对 environment、-v 对 volumes、--restart 对 restart……手工搬容易漏。这个工具逐 flag 解析 docker run 命令,直接生成标准 compose 服务片段。
核心能力
逐 flag 精确映射:--name/-p/-e/-v/-w/-u/--restart/--network/--entrypoint/--env-file/--label/--device/--memory/--cpus 等常用参数全部对应到 compose 字段,-it 展开 tty + stdin_open。
shell 语法兼容:\ 续行、单双引号包裹的参数、--flag=value 形式都能正确切词。
不猜不漏:未识别的 flag 不硬拒——跳过并在输出尾部以 YAML 注释写明,compose 文件保持合法的同时提醒你补手工配置。
使用建议
转换后先看输出尾部的备注行;引用自定义网络时按提示在顶层声明 networks。反向需求(读现有 compose)可以把 YAML 粘到「YAML 工具」格式化检查。服务名默认取镜像名,可用 --name 覆盖。
常见问题
生成的片段直接能用吗?
生成的 services 块是标准 compose 字段。若是插入已有 docker-compose.yml,把该段下面的服务块拷进去即可;单独使用时文件里还需要顶层 version(新版可省)与声明引用的自定义网络。
--gpus、--cap-add 这类参数去哪了?
这些参数 compose 里对应 deploy.resources 等更深的结构,工具会消费掉它们的参数值避免解析串位,并在输出末尾以「# 备注」注释写明跳过了什么——按提示手工补即可。
-d 和 --rm 为什么被忽略?
它们是「运行时行为」:-d 后台运行由 docker compose up -d 承担,--rm 的临时容器语义与 compose 常驻模型冲突。工具不会静默丢弃,会写成备注提醒你。