docker - 如何在 Docker Compose 中连接不同网络中的容器?
问题描述
---
version: '3.7'
networks:
sydney:
name: sydney
london:
name: london
services:
sydney-service:
image: whatever
hostname: sydney-service
container_name: sydney-service
networks:
- sydney
london-service:
image: whatever
hostname: london-service
container_name: london-service
environment:
PAIR_SERVER: sydney-service:8080 # doesn't work
networks:
- london
我在 docker compose 文件中有多个网络。由于不同的服务位于不同的网络中,它们彼此看不到。如何将一个网络中的一项服务连接到另一个网络中的另一项服务?
谢谢!
解决方案
您可以通过将它们放在同一个网络中来连接它们。这就是 docker 中网络的目的,也是通过 docker 网络连接 docker 容器的先决条件之一。
您可以在多个网络中拥有一个容器,这可能会解决您面临的问题:
version: '3.7'
networks:
sydney:
name: sydney
london:
name: london
global:
services:
sydney-service:
image: whatever
hostname: sydney-service
container_name: sydney-service
networks:
- sydney
- global
london-service:
image: whatever
hostname: london-service
container_name: london-service
environment:
PAIR_SERVER: sydney-service:8080 # doesn't work
networks:
- london
- global
另一种选择是绕过容器网络,并在发布的端口上与其他服务通信。在这种情况下,主机名是 docker 主机,端口是发布端口而不是容器端口。如果您的目的是能够在使用 compose 文件部署的容器之间进行通信,我建议您不要这样做。
推荐阅读
- php - 将来自 foreach 的数组值与另一个数组中的键/值相关联
- java - 从根 pom.xml 指向子文件夹 Pom.xml
- java - 支持流量控制的功能数据结构
- ios - 无法在 UINavigationController 上设置后退按钮
- javascript - jQuery内部的多个ajax调用循环记录相同的响应
- c# - 在匿名对象中使用属性的值作为属性名称
- angular - 验证多个复选框减慢应用程序 Angular 5
- android - 带有文件类型的 HTML“输入”标签在移动设备中不起作用。如何解决?
- angular - 从字符串创建一个类
- c# - 如何为日期时间字符串找到正确的自定义格式