断开网络连接的容器

在 Docker Desktop 版本 4.29.0 中引入

断开网络连接的容器允许管理员限制容器访问网络资源,从而限制数据上传或下载的位置。

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

  • 允许网络连接
  • 拒绝网络连接
  • 通过 HTTP 或 SOCKS 代理进行隧道传输

您可以选择

  • 策略适用的传出 TCP 端口。例如,仅特定端口,80443 或使用 * 的所有端口。
  • 是转发到单个 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": "*"
  }
}

containersProxy 设置描述了应用于来自容器的流量的策略。有效字段为

  • locked:如果为 true,则开发人员无法覆盖这些设置。如果为 false,则这些设置将被解释为开发人员可以更改的默认值。
  • mode:与现有的 proxy 设置具有相同的含义。可能的值为 systemmanual
  • httphttpsexclude:与 proxy 设置具有相同的含义。仅当 mode 设置为 manual 时才生效。
  • pac:PAC 文件的 URL。仅当 modemanual 时才生效,并且优先级高于 httphttpsexclude
  • transparentPorts:端口的逗号分隔列表(例如 "80,443,8080")或通配符 (*),指示应代理哪些端口。

重要提示

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

PAC 文件示例

有关 PAC 文件的一般信息,请参阅 MDN Web Docs.

以下是一个 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:porthttps://host_or_ip: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 和 HTTPS 请求通过 HTTP 代理 10.0.0.1:3128 发送。连接到 192.168.0.0/24 子网上的 IP 的请求直接连接。所有其他请求都将被阻止。

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