首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在公司代理后面使用docker-compose进行服务间联网?

如何在公司代理后面使用docker-compose进行服务间联网?
EN

Stack Overflow用户
提问于 2019-01-21 08:01:52
回答 1查看 266关注 0票数 1

我需要在公司代理后面运行docker-compose网络,但由于代理,服务之间的访问通常最终通过代理路由,而代理显然不知道它们。

例如,此docker-compose.yml

代码语言:javascript
复制
version: '3.4'
services:
   webserver:
     image: nginx
   webtest:
     image: alpine
     command: sh -c "sleep 1 && wget -O - http://webserver"

失败是因为wget正在向企业代理询问有关webserver的信息,而它没有指向我创建的服务:

代码语言:javascript
复制
$ docker-compose up
Starting dgx-docker-network-test_webtest_1   ... done
Starting dgx-docker-network-test_webserver_1 ... done
Attaching to dgx-docker-network-test_webtest_1, dgx-docker-network-test_webserver_1
webtest_1    | Connecting to proxy.blah.blah.blah:8080 (xx.xx.xx.xx:8080)
webtest_1    | wget: server returned error: HTTP/1.1 307 Temporarily Moved for Domain Name Expansion

如果我将命令更改为不使用ping等代理的工具,则可以正常工作:

代码语言:javascript
复制
$ docker-compose up
Starting dgx-docker-network-test_webserver_1 ... done
Starting dgx-docker-network-test_webtest_1   ... done
Attaching to dgx-docker-network-test_webserver_1, dgx-docker-network-test_webtest_1
webtest_1    | PING webserver (172.18.0.2): 56 data bytes
webtest_1    | 64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.090 ms
webtest_1    | 64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.095 ms
webtest_1    | 64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.076 ms
webtest_1    | 64 bytes from 172.18.0.2: seq=3 ttl=64 time=0.072 ms
webtest_1    | 
webtest_1    | --- webserver ping statistics ---
webtest_1    | 4 packets transmitted, 4 packets received, 0% packet loss
webtest_1    | round-trip min/avg/max = 0.072/0.083/0.095 ms
dgx-docker-network-test_webtest_1 exited with code 0

那么,在尝试访问docker-compose启动的服务时,让代理被忽略的最佳方式是什么呢?docker-compose有没有办法自动将服务添加到它从~/.docker/config.json创建的no_proxy环境变量中

EN

回答 1

Stack Overflow用户

发布于 2019-01-21 11:04:57

到目前为止,我得到的最好答案是,每个服务上的no_proxyNO_PROXY环境变量都需要更新,以包括它想要访问的服务。但这是相当庞大的,如果有另一种方法那就太好了:

代码语言:javascript
复制
version: '3.4'
services:
   webserver:
     image: nginx
   webtest:
     image: cirrusci/wget # docker image with prebuild GNU wget                                                                                                
     command: sh -c "sleep 1 && wget -O - http://webserver"
     environment:
       - no_proxy=webserver,${no_proxy}
       - NO_PROXY=webserver,${NO_PROXY}

不幸的是,高山附带的wget的busybox版本似乎不支持no_proxy/NO_PROXY,所以我不得不使用一个带有GNU wget的镜像。但它确实起作用了:

代码语言:javascript
复制
$ docker-compose up
Starting dgx-docker-network-test_webserver_1 ... done
Starting dgx-docker-network-test_webtest_1   ... done
Attaching to dgx-docker-network-test_webserver_1, dgx-docker-network-test_webtest_1
webtest_1    | --2019-01-21 02:45:07--  http://webserver/
webtest_1    | Resolving webserver... 172.18.0.2
webtest_1    | Connecting to webserver|172.18.0.2|:80... connected.
webtest_1    | HTTP request sent, awaiting response... 200 OK
webtest_1    | Length: 612 [text/html]
webtest_1    | Saving to: 'STDOUT'
webtest_1    | 
webtest_1    |      0K                                        <!DOCTYPE html>
webtest_1    | <html>
webtest_1    | <head>
webtest_1    | <title>Welcome to nginx!</title>
webtest_1    | <style>
webtest_1    |     body {
webtest_1    |         width: 35em;
webtest_1    |         margin: 0 auto;
webtest_1    |         font-family: Tahoma, Verdana, Arial, sans-serif;
webtest_1    |     }
webtest_1    | </style>
webtest_1    | </head>
webtest_1    | <body>
webtest_1    | <h1>Welcome to nginx!</h1>
webtest_1    | <p>If you see this page, the nginx web server is successfully installed and
webtest_1    | working. Further configuration is required.</p>
webtest_1    | 
webtest_1    | <p>For online documentation and support please refer to
webtest_1    | <a href="http://nginx.org/">nginx.org</a>.<br/>
webtest_1    | Commercial support is available at
webtest_1    | <a href="http://nginx.com/">nginx.com</a>.</p>
webtest_1    | 
webtest_1    | <p><em>Thank you for using nginx.</em></p>
webtest_1    | </body>
webtest_1    | </html>
webserver_1  | 172.18.0.3 - - [21/Jan/2019:02:45:07 +0000] "GET / HTTP/1.1" 200 612 "-" "Wget/1.19.5 (linux-musl)" "-"
webtest_1    |                100% 62.8M=0s
webtest_1    | 
webtest_1    | 2019-01-21 02:45:07 (62.8 MB/s) - written to stdout [612/612]
webtest_1    | 
dgx-docker-network-test_webtest_1 exited with code 0

我对这个解决方案不太满意,因为:

对于no_proxyNO_PROXY.

  • I,我必须重复这一点。我必须在no_proxy/NO_PROXY中列出所有服务的所有服务,或者查看我的docker-compose.yml并根据我要访问的内容为每个服务自定义设计列表

  • 我不包括有关<代码>D20中的no_proxy/<代码>D19的任何内容,这在某些设置中可能是一个问题。<代码>H221<代码>G222

鉴于docker已经在解析来自~/.docker/config.jsonno_proxy/NO_PROXY,如果docker-compose能够在此基础上以某种方式自动处理,那就太好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54282114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档