Crescendo Lab 文件
正體中文
註冊開始用

容器執行合約

容器 App 的映像檔要符合的規則。平台能自動調整的地方會調整,並在版本頁留下提示。

最後更新

規則#

項目要求不符合時
啟動指令要有 CMD 或 ENTRYPOINT。版本被拒收。
通訊埠在 $PORT 提供 HTTP。依「設定 → EXPOSE → 8080」的順序決定,見 App 設定。
平台linux/amd64。推送其他平台的映像檔會被拒絕。
使用者建議設定非 root 的 USER。以 root 執行或沒設定時,改用 uid 10001、群組 0 執行;指定映像檔裡沒有的使用者,版本被拒收。
檔案系統除了 /tmp 都是唯讀。寫入其他路徑會失敗。
雲端憑證平台不提供。需要存取外部服務時,改用 App 的密鑰。

映像檔改用 uid 10001 執行時,它要讀的檔案必須讓群組 0 可以讀。

提示#

平台調整過的地方會以提示顯示在版本頁和映像檔的「檢查」分頁。AI 工具從部署狀態也讀得到同樣的代碼。

代碼意思要做什麼
imageUserForced映像檔以 root 執行,改用 uid 10001 執行。不用處理。想消除提示,就在 Dockerfile 設定非 root 的 USER。
imagePortFromExposeApp 監聽映像檔 EXPOSE 的那一個通訊埠。不用處理。
imagePortsAmbiguous映像檔 EXPOSE 了好幾個通訊埠,其中沒有 8080,所以用 8080 執行,這多半不是伺服器監聽的通訊埠。在「設定 › 執行設定 › 通訊埠」選正確的通訊埠再重新啟動服務,或讓 Dockerfile 只 EXPOSE 那一個。

啟動時會寫檔的映像檔#

有些映像檔啟動時會寫入 /tmp 以外的路徑。例如 nginx:alpine 會寫 /var/cache/nginx,在唯讀的檔案系統上啟動就會失敗。請換成不需要寫入的映像檔,或把寫入位置改到 /tmp:

Dockerfile
FROM nginxinc/nginx-unprivileged:alpine
COPY dist/ /usr/share/nginx/html/

只是要放靜態檔案?

直接部署靜態網站就好,不用自己跑 nginx。