跳到正文
馬克工具箱

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" 會得到完整的值。

隱私說明

本工具完全在瀏覽器中執行,檔案和文字都在你的裝置上處理,不會上傳到我們的伺服器。

相關工具