0%
Loading ...

[開發筆記] 讓 Docker 在不同平台 / OS 的都可以執行的兼容性

image 1727760917482

問題

GitHub Action 跑的了特定的 docker image,結果在 local build 的時候跑不起來。

file

硬體層面

主要是因為跑在不同 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

數據女巫 𝔻.𝕡𝕪𝕤 🔮

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.