氣隙容器
目錄
隔離容器允許您透過控制容器傳送和接收資料的位置來限制容器網路訪問。此功能將自定義代理規則應用於容器網路流量,有助於保護容器不應具有無限制網際網路訪問的環境。
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
- 主機名適用於埠 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
設定控制應用於容器流量的網路策略
引數 | 描述 | 值 |
---|---|---|
已鎖定 | 防止開發者覆蓋設定 | true (已鎖定)、false (預設) |
mode | 代理配置方法 | system (使用系統代理)、manual (自定義) |
http | HTTP 代理伺服器 | URL(例如,"http://proxy.company.com:8080" ) |
https | HTTPS 代理伺服器 | URL(例如,"https://proxy.company.com:8080" ) |
排除 | 繞過這些地址的代理 | 主機名/IP 陣列 |
pac | 代理自動配置檔案的 URL | PAC 檔案 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 檔案可能會影響容器網路效能。保持規則簡單高效。