在docker-compose

时间:2017-12-05 08:07:51

标签: docker docker-compose

我刚开始使用docker-compose,目前正在努力解决不同服务之间的沟通问题。

我有2项服务,alicebob。我希望这些能够向对方发送http请求。据我所知,服务应该能够通过使用servicename作为主机名来达到彼此。

很遗憾,我的示例中的alice无法http://bob:5557上的bobbob无法alice version: '3' services: alice: build: blockchain ports: - "5556:5000" environment: NAME: Alice bob: build: blockchain ports: - "5557:5000" environment: NAME: Bob }}

我不理解的是什么?甚至可以在服务之间发出http请求吗?

这是我的 docker-compose.yml 文件:

$(selector).dialog();
$(selector).jqGrid({});

2 个答案:

答案 0 :(得分:5)

正如Networking in Compose

中明确记录的那样
  

联网服务到服务通信使用CONTAINER_PORT

因此,您应该使用容器端口在容器之间进行通信。 http://bob:5000http://alice:5000

答案 1 :(得分:1)

你在docker-compose中命名的Alice和Bob是docker name(docker run --name)而不是docker的主机名;我会要求你定义"主机名"在docker-compose文件中键入以定义docker的主机名;见下面的例子:

   version: "3.0"
   services:
       lab1:
           image: ubuntu:version0
           container_name: lab1
           entrypoint: /bin/bash
           stdin_open: true
           hostname: lab1

       lab2:
          image: ubuntu:version0
          container_name: lab2
          entrypoint: /bin/bash
          stdin_open: true
          hostname: lab2

一旦您定义了主机名'在docker-compose文件中然后尝试使用hostname ping容器;它应该先成功。

接下来利用港口;您将Alice端口5000绑定到主机端口5556,将Bob端口5000绑定到主机端口5557;从主机到达特定的docker端口,您需要使用端口5556或5557分别到达Alice或Bob容器,而如果您想要到达容器内容器的端口,那么您需要使用所使用的实际端口通过集装箱进行沟通;这是5556或5557端口,分别从容器到达Alice或Bob。