Air-gapped containers

在 Docker Desktop 版本 4.29.0 中引入

Air-gapped containers允许您限制容器访问网络资源,从而限制数据可以上传到或下载的位置。

Docker Desktop 可以将一组自定义代理规则应用于来自容器的网络流量。代理可以配置为:

  • 接受网络连接
  • 拒绝网络连接
  • 通过 HTTP 或 SOCKS 代理建立隧道

您可以选择:

  • 策略应用于哪些传出 TCP 端口。例如,只有某些端口80,443或全部使用 .*
  • 是转发到单个 HTTP 或 SOCKS 代理,还是通过代理自动配置 (PAC) 文件为每个目标设置策略。

配置

假设启用了强制登录设置管理,请将新的代理配置添加到admin-settings.json文件。例如:

{
  "configurationFileVersion": 2,
  "containersProxy": {
    "locked": true,
    "mode": "manual",
    "http": "",
    "https": "",
    "exclude": "",
    "pac": "http://192.168.1.16:62039/proxy.pac",
    "transparentPorts": "*"
  }
}

containersProxysetting 描述应用于来自容器的流量的策略。有效字段为:

  • locked:如果为 true,则开发人员无法覆盖这些设置。如果为 false,则设置将解释为开发人员可以更改的默认值。
  • mode:与现有proxy设置。可能的值为systemmanual.
  • http,https,exclude:与proxy设置。仅在以下情况下生效mode设置为manual.
  • pac:PAC 文件的 URL。仅在以下情况下生效modemanual,并且被认为比http,https,exclude.
  • transparentPorts:以逗号分隔的端口列表(例如"80,443,8080") 或通配符 () 指示应代理哪些端口。*

重要

任何现有的proxy设置在admin-settings.json文件继续应用于来自主机上应用程序的流量。

示例 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";
}

urlparameter 是http://host_or_ip:porthttps://host_or_ip:port.

主机名通常可用于 port 上的传出请求80443,但对于其他情况,只有一个 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 代理发送10.0.0.1:3128.连接到子网上的 IP 的请求192.168.0.0/24直接连接。所有其他请求都将被阻止。

要限制连接到 developers 本地计算机上端口的流量,匹配特殊主机名host.docker.internal.