如何使用no_proxy设置设置Docker

时间:2019-08-15 00:08:26

标签: docker proxy docker-compose

我正在使用docker compose在自己的机器上设置三个docker容器:

  • 一个是用React.js编写的门户(称为portal
  • 一个是带有GraphQL的中间件层(称为gateway
  • 一个是使用node.js(称为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设置?在我看来,从gatewayauth的请求被错误地通过172.30.245.96:3128代理,导致它无法正常工作。谢谢

1 个答案:

答案 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作为示例。