氣隙容器
目錄
隔離容器讓您能夠限制容器的網路存取,透過控制容器發送和接收數據的位置來確保安全。此功能將自訂代理規則應用於容器網路流量,有助於保護那些容器不應擁有不受限網際網路存取的環境。
Docker Desktop 可以設定容器網路流量以接受連線、拒絕連線,或透過 HTTP 或 SOCKS 代理伺服器進行隧道傳輸。您可以控制原則適用於哪些 TCP 連接埠,並透過代理伺服器自動設定 (PAC) 檔案決定是使用單一代理還是基於目標的原則。
本頁提供隔離容器的概述與設定步驟。
誰應該使用隔離容器?
隔離容器有助於組織在受限環境中維護安全性:
- 安全的開發環境:防止容器存取未經授權的外部服務。
- 合規需求:符合要求網路隔離的監管標準。
- 資料外洩防護:阻止容器將敏感資料上傳至外部服務。
- 供應鏈安全:控制容器在建置期間可以存取哪些外部資源。
- 企業網路原則:對容器化應用程式強制執行現有的網路安全原則。
隔離容器的運作方式
隔離容器透過攔截容器網路流量並應用代理規則來運作:
- 流量攔截:Docker Desktop 會攔截所有來自容器的對外網路連線。
- 連接埠過濾:只有特定連接埠上的流量 (
transparentPorts) 會受到代理規則的約束。 - 規則評估:PAC 檔案規則或靜態代理設定決定如何處理每個連線。
- 連線處理:根據規則,流量會被允許直接連線、透過代理伺服器路由,或遭到封鎖。
一些重要的考量包括:
- 現有的
proxy設定持續適用於宿主機上的 Docker Desktop 應用程式流量。 - 如果 PAC 檔案下載失敗,容器會封鎖對目標 URL 的請求。
- URL 參數格式為
http://host_or_ip:port或https://host_or_ip:port。 - 主機名稱 (Hostname) 可用於 80 和 443 連接埠,其他連接埠僅支援 IP 位址。
先決條件
在設定隔離容器之前,您必須具備:
- 已啟用 強制登入 (Enforce sign-in),以確保使用者透過貴組織進行身份驗證。
- Docker 商務版訂閱
- 已設定 設定管理 (Settings Management) 以管理組織原則。
- 已下載 Docker Desktop 4.29 或更高版本。
設定隔離容器
將容器代理加入您的 admin-settings.json 檔案。例如:
{
"configurationFileVersion": 2,
"containersProxy": {
"locked": true,
"mode": "manual",
"http": "",
"https": "",
"exclude": [],
"pac": "http://192.168.1.16:62039/proxy.pac",
"transparentPorts": "*"
}
}設定參數
containersProxy 設定控制應用於容器流量的網路原則:
| 參數 | 描述 | 值 |
|---|---|---|
locked | 防止開發者覆寫設定。 | true (鎖定),false (預設)。 |
模式 | 代理設定方法 | system (使用系統代理),manual (自訂)。 |
http | HTTP 代理伺服器 | URL (例如:"http://proxy.company.com:8080") |
https | HTTPS 代理伺服器 | URL (例如:"https://proxy.company.com:8080") |
exclude | 對這些位址繞過代理伺服器 | 主機名稱/IP 的陣列 |
pac | 代理自動設定檔案 URL | PAC 檔案的 URL |
transparentPorts | 受代理規則約束的連接埠 | 逗號分隔的連接埠或萬用字元 ("*") |
設定範例
封鎖所有外部存取
"containersProxy": {
"locked": true,
"mode": "manual",
"http": "",
"https": "",
"exclude": [],
"transparentPorts": "*"
}允許特定的內部服務
"containersProxy": {
"locked": true,
"mode": "manual",
"http": "",
"https": "",
"exclude": ["internal.company.com", "10.0.0.0/8"],
"transparentPorts": "80,443"
}透過企業代理伺服器路由
"containersProxy": {
"locked": true,
"mode": "manual",
"http": "http://corporate-proxy.company.com:8080",
"https": "http://corporate-proxy.company.com:8080",
"exclude": ["localhost", "*.company.local"],
"transparentPorts": "*"
}代理伺服器自動設定 (PAC) 檔案
PAC 檔案透過為不同目的地定義規則,提供對容器網路存取的細粒度控制。
基本 PAC 檔案結構
function FindProxyForURL(url, host) {
if (localHostOrDomainIs(host, 'internal.corp')) {
return "PROXY 10.0.0.1:3128";
}
if (isInNet(host, "192.168.0.0", "255.255.255.0")) {
return "DIRECT";
}
return "PROXY reject.docker.internal:1234";
}PAC 檔案回傳值
| 回傳值 | 動作 |
|---|---|
PROXY host:port | 透過指定的主機和連接埠進行 HTTP 代理路由。 |
SOCKS5 host:port | 透過指定的主機和連接埠進行 SOCKS5 代理路由。 |
DIRECT | 允許直接連線,不透過代理。 |
PROXY reject.docker.internal:any_port | 完全封鎖請求。 |
進階 PAC 檔案範例
function FindProxyForURL(url, host) {
// Allow access to Docker Hub for approved base images
if (dnsDomainIs(host, ".docker.io") || host === "docker.io") {
return "PROXY corporate-proxy.company.com:8080";
}
// Allow internal package repositories
if (localHostOrDomainIs(host, 'nexus.company.com') ||
localHostOrDomainIs(host, 'artifactory.company.com')) {
return "DIRECT";
}
// Allow development tools on specific ports
if (url.indexOf(":3000") > 0 || url.indexOf(":8080") > 0) {
if (isInNet(host, "10.0.0.0", "255.0.0.0")) {
return "DIRECT";
}
}
// Block access to developer's localhost
if (host === "host.docker.internal" || host === "localhost") {
return "PROXY reject.docker.internal:1234";
}
// Block all other external access
return "PROXY reject.docker.internal:1234";
}驗證隔離容器設定
套用設定後,測試容器網路限制是否運作:
測試封鎖存取
$ docker run --rm alpine wget -O- https://www.google.com
# Should fail or timeout based on your proxy rules
測試允許存取
$ docker run --rm alpine wget -O- https://internal.company.com
# Should succeed if internal.company.com is in your exclude list or PAC rules
測試代理路由
$ docker run --rm alpine wget -O- https://docker.io
# Should succeed if routed through approved proxy
安全性考量
- 網路原則強制執行:隔離容器在 Docker Desktop 層級運作。進階使用者可能會透過各種方式繞過限制,因此在高安全性環境中請考慮額外的網路層級控制。
- 開發工作流程影響:過於嚴格的原則可能會破壞合法的開發工作流程。請務必充分測試,並為必要服務提供明確的例外規定。
- PAC 檔案管理:將 PAC 檔案託管在可靠的內部基礎架構上。下載 PAC 失敗將導致容器網路存取被封鎖。
- 效能考量:具有大量規則的複雜 PAC 檔案可能會影響容器網路效能。請保持規則簡單且高效。