在docker-compose中的不同docker服务之间进行通信

我刚刚开始与docker-compose合作,目前正在努力处理不同的服务之间的沟通。

我有2个服务, alicebob 。 我希望这些能够发送http请求到对方。 据我了解,服务应该能够通过使用servicename作为主机名相互达到。

不幸的是,在我的例子中, alice无法通过http:// bob:5557达到bob ,而bob无法通过http:// alice:5556达到alice

我不正确的理解是什么? 甚至可以在服务之间进行http请求?

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

 version: '3' services: alice: build: blockchain ports: - "5556:5000" environment: NAME: Alice bob: build: blockchain ports: - "5557:5000" environment: NAME: Bob 

正如Compose中的Networking中所清楚记载的那样

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

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

您在docker-compose中命名的Alice和Bob是docker name(docker run -name)而不是docker的主机名; 我会要求你在docker-compose文件中定义“hostname”键来定义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。