隔離網路的容器

Docker Desktop 4.29.0 版引入

隔離網路的容器可讓您限制容器存取網路資源,限制資料可以上傳或下載的位置。

Docker Desktop 可以將一組自訂的代理規則套用至來自容器的網路流量。可以將代理設定為

  • 接受網路連線
  • 拒絕網路連線
  • 透過 HTTP 或 SOCKS 代理進行通道傳輸

您可以選擇

  • 策略套用至哪些輸出 TCP 連接埠。例如,僅特定連接埠, `80`、`443` 或使用 `*` 表示全部。
  • 是否要轉發到單個 HTTP 或 SOCKS 代理,或者是否要透過 Proxy Auto-Configuration (PAC) 檔案針對每個目的地設定策略。

設定

假設已啟用強制登入設定管理,請將新的代理設定新增至 `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,則這些設定會被解譯為開發人員可以變更的預設值。
  • `mode`:與現有 `proxy` 設定的意義相同。可能的值為 `system` 和 `manual`。
  • `http`、`https`、`exclude`:與 `proxy` 設定的意義相同。僅在 `mode` 設定為 `manual` 時才會生效。
  • `pac`:PAC 檔案的 URL。僅在 `mode` 為 `manual` 時才會生效,且其優先順序高於 `http`、`https`、`exclude`。
  • `transparentPorts`:以逗號分隔的連接埠清單(例如 `“80,443,8080”`)或萬用字元 (`*`),指示應代理哪些連接埠。

重要

`admin-settings.json` 檔案中任何現有的 `proxy` 設定會繼續套用至主機上應用程式的流量。

PAC 檔案範例

如需 PAC 檔案的一般資訊,請參閱 MDN Web 文件

以下是 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";
}

`url` 參數是 `http://host_or_ip:port` 或 `https://host_or_ip:port`。

主機名稱通常可用于連接埠 `80` 和 `443` 上的輸出請求,但在其他情況下只有 IP 位址。

`FindProxyForURL` 可以傳回以下值

  • `PROXY host_or_ip:port`:透過 HTTP 代理 `host_or_ip:port` 傳輸此請求
  • `SOCKS5 host_or_ip:port`:透過 SOCKS 代理 `host_or_ip:port` 傳輸此請求
  • `DIRECT`:允許此請求直接執行,不使用代理
  • `PROXY reject.docker.internal:any_port`:拒絕此請求

在此特定範例中,`internal.corp` 的 HTTP 和 HTTPS 請求會透過 HTTP 代理 `10.0.0.1:3128` 傳送。連線到子網路 `192.168.0.0/24` 上 IP 的請求會直接連線。所有其他請求都會被封鎖。

要限制連線到開發人員本機電腦上連接埠的流量,請比對特殊主機名稱 `host.docker.internal`