隔离容器
目录
在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`。