氣隙容器

要求: 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
  • 主機名適用於埠 80 和 443,但其他埠只適用於 IP 地址

先決條件

在配置隔離容器之前,您必須擁有

  • 啟用 強制登入 以確保使用者使用您的組織進行身份驗證
  • Docker Business 訂閱
  • 配置 設定管理 以管理組織策略
  • 下載 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 設定控制應用於容器流量的網路策略

引數描述
已鎖定防止開發者覆蓋設定true(已鎖定)、false(預設)
mode代理配置方法system(使用系統代理)、manual(自定義)
httpHTTP 代理伺服器URL(例如,"http://proxy.company.com:8080"
httpsHTTPS 代理伺服器URL(例如,"https://proxy.company.com:8080"
排除繞過這些地址的代理主機名/IP 陣列
pac代理自動配置檔案的 URLPAC 檔案 URL
透明埠受代理規則約束的埠逗號分隔的埠或萬用字元 ("*")

配置示例

阻止所有外部訪問

"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 檔案可能會影響容器網路效能。保持規則簡單高效。