故障排除

以下是您在遷移到或使用 Docker 強化映象 (DHI) 時可能遇到的常見問題以及推薦的解決方案。

一般除錯

Docker 強化映象經過最佳化,可提高安全性和執行時效能。因此,它們通常不包含 Shell 或標準除錯工具。建議使用 Docker Debug 來排除基於 DHI 構建的容器的故障。

Docker Debug 允許您:

  • 將臨時除錯容器附加到現有容器。
  • 使用 Shell 和熟悉的工具,例如 curlpsnetstatstrace
  • 在會話結束後消失的可寫、臨時層中根據需要安裝其他工具。

許可權

DHI 預設以非 root 使用者身份執行,以增強安全性。這可能會導致訪問檔案或目錄時出現許可權問題。確保您的應用程式檔案和執行時目錄歸預期的 UID/GID 所有或具有適當的許可權。

要了解 DHI 以哪個使用者身份執行,請檢視 Docker Hub 上該映象的儲存庫頁面。有關更多資訊,請參閱檢視映象變體詳細資訊

特權埠

非 root 容器預設無法繫結到 1024 以下的埠。這由容器執行時和核心強制執行(尤其是在 Kubernetes 和 Docker Engine < 20.10 中)。

在容器內部,將應用程式配置為偵聽非特權埠(1025 或更高)。例如,docker run -p 80:8080 my-image 將容器中的埠 8080 對映到主機上的埠 80,允許您在不需要 root 許可權的情況下訪問它。

無 Shell

執行時 DHI 省略了互動式 Shell,例如 shbash。如果您的構建或工具假定存在 Shell(例如,對於 RUN 指令),請在較早的構建階段使用映象的 dev 變體,並將最終工件複製到執行時映象中。

要了解 DHI 包含哪些 Shell(如果有),請檢視 Docker Hub 上該映象的儲存庫頁面。有關更多資訊,請參閱檢視映象變體詳細資訊

此外,當您需要 Shell 訪問正在執行的容器時,請使用Docker Debug

入口點差異

與 Docker 官方映象 (DOI) 或其他社群映象相比,DHI 可能定義了不同的入口點。

要了解 DHI 的 ENTRYPOINT 或 CMD,請檢視 Docker Hub 上該映象的儲存庫頁面。有關更多資訊,請參閱檢視映象變體詳細資訊

無軟體包管理器

執行時 Docker 強化映象經過精簡,以提高安全性和最小化攻擊面。因此,它們不包含軟體包管理器,例如 apkapt。這意味著您無法直接在執行時映象中安裝其他軟體。

如果您的構建或應用程式設定需要安裝軟體包(例如,編譯程式碼、安裝執行時依賴項或新增診斷工具),請在構建階段使用映象的 dev 變體。然後,僅將必要的工件複製到最終的執行時映象中。