隔离容器

在Docker Desktop版本 4.29.0中引入

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

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": "*"
  }
}

`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`