⭐ 觉得好用?收藏备用,下次直接打开

docker run ↔ compose 互转docker run 命令与 docker-compose.yml 之间双向转换:把一行长命令沉淀成 compose 配置,或把 compose 里的服务还原成可直接执行的 run 命令。覆盖端口、数据卷、环境变量、网络、重启策略、健康检查等常见参数,无法一一对应的会明确提示,全程本地运行、不上传。

常见映射对照

docker rundocker-compose
-p 8080:80ports: ["8080:80"]
-v /data:/app:rovolumes: ["/data:/app:ro"]
-e KEY=VALenvironment: ["KEY=VAL"]
--name webcontainer_name: web
--restart unless-stoppedrestart: unless-stopped
--network mynetnetworks: [mynet]
--health-cmd "curl -f ..."healthcheck.test
镜像后的参数command:

提示:--rm--gpus-P--mount 等没有直接等价物,转换后会在”需注意”里列出,按提示手动补全即可。

📍使用场景

  • 把临时的 docker run 沉淀成 compose调试时随手敲了一长串 docker run,验证可用后想固化成版本可控的 docker-compose.yml。粘进来一键转换,端口、卷、环境变量、重启策略都自动落到对应字段。
  • 看懂别人的 compose 文件接手项目拿到一份 compose.yml,想知道某个服务等价的 docker run 是什么、方便单独起一个容器排查。切到反向,逐服务生成可直接执行的 run 命令。
  • 教程/文档双向给例子写部署文档时,既给 docker run 一行命令、又给 compose 配置,照顾不同读者。一处编辑、另一处即时生成,省去手抄对照。

常见问题

支持哪些 docker run 参数?

常用的都支持:-p/--publish、-v/--volume、-e/--env、--env-file、--name、--restart、--network、-w、-u、--hostname、--entrypoint、-l/--label、--cap-add/drop、--device、--add-host、--dns、--link、--privileged、--read-only、-i/-t、--init、-m、--cpus、--shm-size、--log-driver/--log-opt、--ulimit、--platform、--health-* 等。镜像后面的内容会作为 command。不认识的参数会跳过并在下方提示。

为什么有些参数转换后给了"需注意"提示?

因为它们在 docker run 和 compose 之间没有一一对应。比如 --rm(compose 不会自动删容器)、--gpus(需写成 deploy.resources.reservations.devices)、-P(发布所有暴露端口)、--mount(结构较复杂)。工具会把这些列出来,提醒你手动确认,而不是悄悄丢掉。

compose 转 run 时,build、depends_on 怎么处理?

docker run 不能构建镜像,所以遇到 build: 会用 image 占位并提示你;depends_on 表达的是启动顺序与健康依赖,docker run 没有等价物,会提示你手动保证先后顺序。其余字段尽量逐项还原成对应的 run 参数。

多服务的 compose 能转吗?

能。会为 services 下的每个服务各生成一条独立的 docker run 命令,依次列出。注意它们之间的网络、依赖关系需要你按提示自行处理。

转换结果可以直接用吗?

大多数常见场景可以直接复制执行/落库,但建议过一眼:一是看"需注意"里的提示项,二是核对卷路径、网络名等与你环境是否一致。compose 版本字段差异(如 mem_limit / deploy.resources)在不同 Compose 版本下行为略有不同。

数据会上传吗?

不会。命令解析与 YAML 生成全部在浏览器本地完成,不发起任何网络请求,含密钥的环境变量也不会外泄。