實用工具

docker run 轉 Docker Compose

把 docker run 指令轉成 compose.yaml,每個指令一個服務,連接埠、磁碟區、環境變數和 GPU 都一併帶上。

瀏覽器本機執行程式碼轉換3758
免費

輸入

0 B

結果

結果會顯示在這裡。

專案 README 通常從一行 docker run 指令開始,但只要執行的容器不只一個——Open WebUI 搭配 Ollama、應用程式搭配資料庫——compose.yaml 就好維護得多。貼上一個或多個 docker run 指令,這個工具會用 composerize(composerize.com 背後的開源轉換器)逐一轉換,再合併成一個 Compose 檔案:連接埠、磁碟區、環境變數、重新啟動策略、額外主機和 GPU 保留都會放到各自服務下正確的鍵。

它是怎麼運作的

  • 每行一個指令,或用 && 串接;反斜線換行接續、開頭的 $ 提示字元、sudo 和 podman run 都能辨識。
  • 服務以容器的 --name 命名;沒有 --name 時使用映像檔名稱,名稱重複時會加上 -2 後綴,不會有容器互相覆蓋。
  • 可以選擇目前的 Compose 檔案格式(沒有 version 鍵),或以 version: 開頭的舊版 3.x、2.x 格式,縮排為兩個或四個空格。
  • composerize 寫入的佔位專案名稱會被移除,因為 Compose 會拒絕它;之後 Compose 會以檔案所在的資料夾為專案命名。

你的資料去了哪裡

哪也沒去。本工具完全在你的瀏覽器裡執行:你貼上的文字由頁面處理,不會傳輸到任何伺服器,也不會寫進任何紀錄。

本工具免費且免登入,執行結果只存在於你目前的頁面裡,不會被儲存到任何地方。

它要花多少

本工具完全免費,不需要登入,也不消耗點數。

常見問題

為什麼我的具名磁碟區被標成 external: true?
因為 docker run 使用的具名磁碟區——-v ollama:/root/.ollama——已經存在,裡面有你的資料。標成 external,Compose 就會直接使用這個磁碟區;不標的話,Compose 會另外建立一個加上專案名稱前綴的空磁碟區。檔案上方的註解也說明了這點。如果是全新部署,刪掉 external 那幾行,Compose 就會自行建立磁碟區。
--gpus all 會轉換過去嗎?
會。它會變成 deploy.resources.reservations.devices 底下的一項,driver 為 nvidia、count 為 all、帶有 gpu 能力,這就是 Compose 請求 GPU 的寫法;主機上仍需安裝 NVIDIA Container Toolkit,和使用 docker run 時一樣。
要保留 version: 這一行嗎?
使用目前的 Docker 就不需要。docker compose(v2)實作的 Compose Specification 會忽略 version,並提示它已經過時,所以預設格式不寫這一行。只有檔案要給舊的 docker-compose 1.x 或需要這個鍵的工具讀取時,才選 3.x 或 2.x。
有選項沒被轉換怎麼辦?
composerize 能對應大多數 docker run 選項,少數在 Compose 裡沒有對應項目的會被略去。使用前請把結果和原本的指令對照一遍,特別是不常見的參數——另外請記得,映像檔名稱必須寫在所有選項之後,docker run 本身也是這樣要求的。

背後的開源專案

本工具執行在 composerize/composerize 之上,以 MIT 授權發布。如果你需要在自己的程式裡實作同樣的能力,直接用這個函式庫。

composerize/composerize

也常被稱作

  • docker run 轉 compose
  • docker run 轉 docker-compose
  • composerize
  • docker 指令轉 yaml
  • docker compose 產生器
  • docker-compose.yml 產生