docker-compose在容器之间发出请求

时间:2018-08-24 19:40:35

标签: docker docker-compose

我对docker-compose有点陌生,所以我不确定自己在寻找什么。

我创建了两个映像,并使用docker-compose运行它们,在本地环境中,这两个服务通过HTTP请求进行通信(两者都在localhost上运行,一个在端口3000上运行,一个在8000端口上运行) / p>

当我将这两个服务移至docker(两个分离的容器和图像)时,我似乎可以使它们进行通信。

这是我的docker-compose文件:

version: '3'

services:
  service1:
    image: services/services1
    ports:
      - 3000:3000
    links:
      - "service2"
    depends_on:
      - service2

  service2:
    image: services/service2
    ports:
      - 8000:8000

当我直接向每个服务发出http请求时,我会得到一个很好的响应,但是当我向service1发出请求时,而在services1中我又有一个对服务2的请求,我无法得到响应完全

Error: connect ECONNREFUSED 127.0.0.1:8000

两个服务都在0.0.0.0上运行

3 个答案:

答案 0 :(得分:2)

  

所以我不确定我在找什么。

很可能您正在寻找the docker documentation的这一部分。它说明了docker compose如何处理网络。您最感兴趣的部分是:

By default Compose sets up a single network for your app.
Each container for a service joins the default network and is both reachable
by other containers on that network, and discoverable by them 
at a hostname identical to the container name.

这意味着您应该使用service1和service2而不是localhost来跨服务定位。

答案 1 :(得分:0)

在docker-compose.yml文件中声明的所有服务都在各自的容器中运行。他们有不同的ips。您可以使用将解析为服务ip的服务名称来解决它们。 就您而言:

docker-compose exec service1 ping service2
or
docker-compose exec service2 ping service1

答案 2 :(得分:0)

您应该定义一个网络并使用服务名称而不是localhost:

version: '3'

services:
  service1:
    image: services/services1
    ports:
      - 3000:3000
    links:
      - "service2"
    depends_on:
      - service2
    networks:
      - mynet

  service2:
    image: services/service2
    ports:
      - 8000:8000
    networks:
      - mynet

networks:
  mynet: