如何使用通配符设置 docker 的 NO_PROXY

Cro*_*oss 4 proxy docker

正如此处的docker 官方文档中所述,docker 的代理设置可以在 /etc/systemd/system/docker.service.d/https-proxy.conf 中分配,例如:

[Service]    
Environment="HTTPS_PROXY=https://proxy.example.com:443/" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"
Run Code Online (Sandbox Code Playgroud)

但是,docker 的下载涉及很多 url 重定向。因此,我几乎不会在此处的设置中一一命名它们。

所以我的问题是有什么方法可以实现通配符,例如*.docker.io。

谢谢,克罗斯

Dan*_*res 27

我知道这是几年前的问题,但我想这仍然是开发人员的常见问题,我认为它没有得到正确的回答。

.关于 @Kaneg 批准的答案,在大多数情况下,有效的领先将起到作用......但并非总是如此。

因此,我写下这个答案是为了防止将来有更多的人遇到这个问题。


首先,我们必须记住,著名的NO_PROXY是大多数Web客户端在使用Web代理服务器时接受的环境变量,但是对于如何定义它或每个客户端如何定义它没有标准应该处理这些。

当我们在 Docker 中将这些设置为环境变量时,我们只是强制将来创建的所有容器使用这些环境变量,它们也将用于 Docker(例如从官方注册表下载镜像) )。无论如何,真正的问题取决于我们在这些容器内有什么,因为这才是要求变得严格的地方。

为了最大限度地简化这个过程,我从GitLab 博客中获取了这张表(谢谢 Stan Hu):

卷曲 获取 红宝石 Python
no_proxy 是的 是的 是的 是的 是的
NO_PROXY 是的 是的 是的 是的
大小写优先 小写 仅小写 小写 小写 小写
匹配后缀? 是的 是的 是的 是的 是的
条带领先. 是的 是的 是的
*匹配所有主机? 是的 是的 是的
支持正则表达式吗?
支持 CIDR 块吗? 是的 是的
检测环回 IP? 是的
参考 关联 关联 关联 关联 关联

这是什么意思?

.如果我们只是遵循在 中设置前导的逻辑NO_PROXY,首先,像 之类的工具将无法理解这个前导wget,因此它们无论如何都会通过代理;如果我们将前导设置.no_proxy仍将curl始终删除前导,.同时wget不会删除它,并将对主机名执行精确的字符串匹配。

解决方案

后缀始终匹配,因此最好的解决方案是设置docker.io为包含whatever.docker.io. .如果在每种情况下都需要匹配顶级域,请尽量避免使用前导点 ( )。


Kan*_*neg 5

在 NO_PROXY 中,您可以使用通配符来匹配具有相同域的多个主机。对于 *.docker.io,您可以使用.docker.io

  • 您的意思是“可以使用通配符”还是“不能使用通配符”? (7认同)