跳到正文
马克工具箱

docker run 转 Docker Compose

粘贴一条或多条 docker run 命令,自动生成对应的 compose.yaml。端口、卷、环境变量、网络、重启策略、内存和 CPU 限制、日志、健康检查等常用参数都会转换,没法转换的参数会单独列出,方便手动补上。

在浏览器本地运行,输入的内容和文件都不会上传

docker run → Docker Compose
docker run
Docker Compose

使用步骤

  1. 在左侧粘贴 docker run 命令,行尾反斜杠换行的多行命令也可以;多条命令用换行、分号或 && 分开。
  2. 右侧实时生成 Compose 文件,每条命令是一个服务,服务名取 --name,没有时取镜像名。
  3. 检查黄色提示里没有转换的参数,复制或下载 compose.yaml 后执行 docker compose up -d。

参数说明

支持的参数
-p、-v、--mount、-e、--env-file、--name、--restart、--network、-w、-u、-h、--entrypoint、-l、--add-host、--dns、--cap-add/drop、--device、-m、--cpus、--shm-size、--ulimit、--log-driver/--log-opt、--health-*、-i、-t、--privileged、--init、--read-only 等。
命名卷和网络
命名卷(如 pgdata:/data)会在顶层 volumes 中声明;自定义网络会声明为 external: true,表示使用已经存在的网络。host、none 网络转换为 network_mode。
端口
端口映射一律加双引号。YAML 1.1 会把 22:22 这类写法当成六十进制数字,Docker 官方文档也建议写成字符串。
忽略的参数
-d 和 --rm 在 Compose 中没有对应写法,直接忽略;--gpus 等不支持的参数会列在提示里。

示例

docker run -d --name web --restart unless-stopped -p 8080:80 \
  -v ./html:/usr/share/nginx/html:ro -e TZ=Asia/Shanghai --memory 512m nginx:1.27

转换为:

services:
  web:
    image: nginx:1.27
    container_name: web
    restart: unless-stopped
    mem_limit: 512m
    ports:
      - "8080:80"
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./html:/usr/share/nginx/html:ro

常见问题

生成的文件需要写 version 吗?

不需要。当前的 Docker Compose(v2)已经不使用顶层 version 字段,写了也会被忽略并给出警告。

环境变量里的密码会上传吗?

不会。命令解析和转换都在浏览器中完成,不经过服务器。

能处理带引号的参数吗?

能。按 shell 规则处理单引号、双引号和反斜杠转义,例如 -e "MSG=hello world" 会得到完整的值。

隐私说明

本工具完全在浏览器中运行,文件和文本都在你的设备上处理,不会上传到我们的服务器。

相关工具