問題
GitHub Action 跑的了特定的 docker image,結果在 local build 的時候跑不起來。
硬體層面
主要是因為跑在不同 OS 上,
GitHub Action 是在 Ubuntu 上面運行的,
而我們的 local 端用的是 macOS。
以 python:3.8-slim-buster
這個 image 來說,
雖然 Dockerfile 都是寫 python:3.8-slim-buster
沒錯,
但是在 ARM 架構的 Mac 上 (M 系列都是) ,
Docker 會拉 ARM 版的 image,
但通常 linux 跟 windows 機器都是 x86_64 架構。
另外除了底層硬體根本上的不同,
軟體上的實作也有一點差異。
軟體層面
linux 起 docker 是直接在 kernel 層做一些交互,
而 mac 跟 windows 都是必須起個小 linux 的 VM 才能跑 docker,
所以資源吃比較多。
Performance 比較
例如原本這樣 build 只要 164 秒
FROM python:3.8-slim-buster
使用 QEMU (也就是上面說的小 VM)模擬 linux 環境之後
FROM --platform=linux/amd64 python:3.8-slim-buster
需要整整 774 秒才能整個 build 完,但是確實可以 build。
結論
所以我們 local build 不起來時,先不要懷疑自己遇到鬼故事,
應該是要在考慮雙方 OS 的差異後,
在拉 image 時指定要特殊的 platform,
例如 --platform=linux/amd64
這樣!
PLUS: 如果想要在同一台機器 build 不同 platform 的 container,可以參考 docker buildx
。
- [推薦工具] 讓程式碼截圖變的美美的吧!VScode CodeSnap 與 3 種同功能線上工具介紹 - 2025-01-05
- [AI 繪圖初級教學] 用 X/Y/Z Plot 比較 Stable Diffusion 的 prompt 與 LoRA 效果 - 2024-12-27
- [AI 繪圖中級篇教學] Stable Diffusion WebUI WD14 Tagger 介紹 - 2024-12-26