我刚开始使用docker-compose,目前正在努力解决不同服务之间的沟通问题。
我有2项服务,alice
和bob
。我希望这些能够向对方发送http请求。据我所知,服务应该能够通过使用servicename作为主机名来达到彼此。
很遗憾,我的示例中的alice
无法http://bob:5557上的bob
,bob
无法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({});
答案 0 :(得分:5)
联网服务到服务通信使用CONTAINER_PORT
因此,您应该使用容器端口在容器之间进行通信。
http://bob:5000
和http://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。