容器安全常見問題 (FAQs)
目錄
在 Docker Desktop 中,容器如何與宿主機隔離?
Docker Desktop 將所有容器執行在一個客製化的 Linux 虛擬機中(原生 Windows 容器除外)。這在容器與宿主機之間增加了強大的隔離性,即使容器以 root 身份執行也是如此。
重要的考量因素包括:
- 容器可以存取透過 Docker Desktop 設定進行檔案共享的宿主機檔案。
- 預設情況下,容器在 Docker Desktop 虛擬機內以 root 身份執行,但權限受到限制。
- 特權容器 (
--privileged,--pid=host,--cap-add) 在虛擬機內以提升後的權限執行,這使其能夠存取虛擬機內部和 Docker Engine。
開啟「增強容器隔離」(Enhanced Container Isolation) 後,每個容器都會在 Docker Desktop 虛擬機內的一個專用 Linux 使用者命名空間 (user namespace) 中執行。即使是特權容器,也僅在其容器邊界內擁有權限,而不是在整個虛擬機內。ECI 使用先進技術來防止容器突破 Docker Desktop 虛擬機和 Docker Engine。
容器可以存取宿主機檔案系統的哪些部分?
容器僅能存取符合以下條件的宿主機檔案:
- 透過 Docker Desktop 設定進行共享。
- 明確地以綁定掛載 (bind-mounted) 方式掛載到容器內(例如:
docker run -v /path/to/host/file:/mnt)。
以 root 身份執行的容器可以存取宿主機上由管理員擁有的檔案嗎?
不能。宿主機檔案共享使用使用者空間檔案伺服器(以 Docker Desktop 使用者身份在 com.docker.backend 中執行),因此容器只能存取 Docker Desktop 使用者本身已經擁有存取權限的檔案。