我正在使用docker compose在自己的机器上设置三个docker容器:
portal
)gateway
)auth
)的身份验证服务我还有一些服务已经在公司防火墙后面运行。
在大多数情况下,gateway
将在防火墙后请求资源,因此我已配置Docker容器以通过可访问其他服务的鱿鱼代理来代理请求。但是,不应代理对我的本地auth
服务和其他本地服务的请求。因此,我具有以下docker代理配置(请注意noProxy
设置):
~/.docker/config.json
...
"proxies": {
"default": {
"httpProxy": "http://172.30.245.96:3128",
"httpsProxy": "http://172.30.245.96:3128",
"noProxy": "auth,localhost,127.0.0.1,192.168.0.1/24"
}
}
...
在上述设置下,portal
请求通过浏览器使用gateway
直接进入http://192.168.0.15/foo
,但当gateway
发出请求时, auth
使用http://auth:3001/bar
,他们不直接进入auth
,而是做到通过代理-我正在尝试避免。
我可以看到通过鱿鱼代理错误通过代理发送了auth请求:
<p>The following error was encountered while trying to retrieve the URL: <a href="http://auth:3001/token">http://auth:3001/bar</a></p>
如何使用noProxy
之类的docker服务名称设置docker容器以遵守auth
设置?在我看来,从gateway
到auth
的请求被错误地通过172.30.245.96:3128
代理,导致它无法正常工作。谢谢
答案 0 :(得分:2)
您的Docker配置看起来不错,但是您的主机不知道如何解析名称auth
。根据给定的IP(192.168.x.x),我假设您正在尝试从主机访问容器服务。将auth
的条目添加到主机的/etc/hosts
(如果是Windows,则为C:\Windows\System32\Drivers\etc\hosts
)。
查看Linked docker-compose containers making http requests了解更多详细信息。
如果您在从容器内部获取服务时遇到问题,请查看docker-compose resolve hostname in url作为示例。