氣隙容器

需求: Docker Desktop 4.29.0 或更高版本

隔離容器讓您能夠限制容器的網路存取,透過控制容器發送和接收數據的位置來確保安全。此功能將自訂代理規則應用於容器網路流量,有助於保護那些容器不應擁有不受限網際網路存取的環境。

Docker Desktop 可以設定容器網路流量以接受連線、拒絕連線,或透過 HTTP 或 SOCKS 代理伺服器進行隧道傳輸。您可以控制原則適用於哪些 TCP 連接埠,並透過代理伺服器自動設定 (PAC) 檔案決定是使用單一代理還是基於目標的原則。

本頁提供隔離容器的概述與設定步驟。

誰應該使用隔離容器?

隔離容器有助於組織在受限環境中維護安全性:

  • 安全的開發環境:防止容器存取未經授權的外部服務。
  • 合規需求:符合要求網路隔離的監管標準。
  • 資料外洩防護:阻止容器將敏感資料上傳至外部服務。
  • 供應鏈安全:控制容器在建置期間可以存取哪些外部資源。
  • 企業網路原則:對容器化應用程式強制執行現有的網路安全原則。

隔離容器的運作方式

隔離容器透過攔截容器網路流量並應用代理規則來運作:

  1. 流量攔截:Docker Desktop 會攔截所有來自容器的對外網路連線。
  2. 連接埠過濾:只有特定連接埠上的流量 (transparentPorts) 會受到代理規則的約束。
  3. 規則評估:PAC 檔案規則或靜態代理設定決定如何處理每個連線。
  4. 連線處理:根據規則,流量會被允許直接連線、透過代理伺服器路由,或遭到封鎖。

一些重要的考量包括:

  • 現有的 proxy 設定持續適用於宿主機上的 Docker Desktop 應用程式流量。
  • 如果 PAC 檔案下載失敗,容器會封鎖對目標 URL 的請求。
  • URL 參數格式為 http://host_or_ip:porthttps://host_or_ip:port
  • 主機名稱 (Hostname) 可用於 80 和 443 連接埠,其他連接埠僅支援 IP 位址。

先決條件

在設定隔離容器之前,您必須具備:

設定隔離容器

將容器代理加入您的 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 (自訂)。
httpHTTP 代理伺服器URL (例如:"http://proxy.company.com:8080")
httpsHTTPS 代理伺服器URL (例如:"https://proxy.company.com:8080")
exclude對這些位址繞過代理伺服器主機名稱/IP 的陣列
pac代理自動設定檔案 URLPAC 檔案的 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 檔案可能會影響容器網路效能。請保持規則簡單且高效。
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.