在docker-compose中的不同docker服务之间进行通信
我刚刚开始与docker-compose合作,目前正在努力处理不同的服务之间的沟通。
我有2个服务, alice
和bob
。 我希望这些能够发送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:5000
和http://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。
- jenkins,dockerbuild设步骤创build图像返回NullPointerException
- 在Docker上使用MQTT插件来保护RabbitMQ
- 监视从Docker容器挂载主机目录的更改
- 我该如何解决我的docker-compose.yml? – 预期<block end>,但find'<block mapping start>'
- 在Sonarqube Docker容器中设置用于login的LDAPS时遇到麻烦
- docker部署与docker堆栈部署
- 在AWS上运行RStudio Shiny作为Docker容器?
- docker附加 – 将tty false转为tty true
- Docker上的Asp.Net Core