docker run ↔ compose 互转 在 docker run 命令与 docker-compose.yml 之间双向转换:把一行长命令沉淀成 compose 配置,或把 compose 里的服务还原成可直接执行的 run 命令。覆盖端口、数据卷、环境变量、网络、重启策略、健康检查等常见参数,无法一一对应的会明确提示,全程本地运行、不上传。
| docker run | docker-compose |
|---|---|
-p 8080:80 | ports: ["8080:80"] |
-v /data:/app:ro | volumes: ["/data:/app:ro"] |
-e KEY=VAL | environment: ["KEY=VAL"] |
--name web | container_name: web |
--restart unless-stopped | restart: unless-stopped |
--network mynet | networks: [mynet] |
--health-cmd "curl -f ..." | healthcheck.test |
| 镜像后的参数 | command: |
提示:
--rm、--gpus、-P、--mount等没有直接等价物,转换后会在”需注意”里列出,按提示手动补全即可。
常用的都支持:-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(结构较复杂)。工具会把这些列出来,提醒你手动确认,而不是悄悄丢掉。
docker run 不能构建镜像,所以遇到 build: 会用 image 占位并提示你;depends_on 表达的是启动顺序与健康依赖,docker run 没有等价物,会提示你手动保证先后顺序。其余字段尽量逐项还原成对应的 run 参数。
能。会为 services 下的每个服务各生成一条独立的 docker run 命令,依次列出。注意它们之间的网络、依赖关系需要你按提示自行处理。
大多数常见场景可以直接复制执行/落库,但建议过一眼:一是看"需注意"里的提示项,二是核对卷路径、网络名等与你环境是否一致。compose 版本字段差异(如 mem_limit / deploy.resources)在不同 Compose 版本下行为略有不同。
不会。命令解析与 YAML 生成全部在浏览器本地完成,不发起任何网络请求,含密钥的环境变量也不会外泄。