docker - 从主机 B 上运行的 docker 连接到主机 A
问题描述
我开发分布式系统并考虑以下情况:我的应用程序在主机 A 上运行的 docker 中工作,我想从物理主机 B 上运行的其他服务调用 api(没有 docker)。我可以调用 IP 或 DNS 地址吗?
与上述问题有关的其他情况:我使用 docker-compose 在本地开发分布式系统,并在那里定义服务:ServiceA、ServiceB 等。如果 ServiceA 必须在端口 8080 上调用 ServiceB,我会调用http://ServiceB:8080/
它,它工作正常。在生产中,每个服务都应该在具有不同 IP 的不同主机上工作。那么我将在不同的主机上运行每个服务并且我将从ServiceA调用ServiceBhttp://<IP_of_ServiceB>:8080
而不是使用服务名称是一种好方法吗?
解决方案
第一个问题,是的,只要确保端口是公开的并且可以从另一台主机访问。
第二个问题,你仍然可以这样做(在一个环境中写下主机 B 的 ip 左右)。或者,您可能需要考虑使用 docker swarm 来部署您的生产堆栈。结合覆盖网络,使您的 2 个主机像一个一样,您可以继续呼叫http://ServiceB:3000/
version: '3'
services:
serviceA:
image: serviceA
ports:
- "8080:8080"
networks:
- swarm-net
serviceB:
image: serviceB
networks:
- swarm-net
ports:
- "3000:3000"
networks:
swarm-net:
driver: overlay
推荐阅读
- java - proto3 不支持 isStringEmpty()
- sql - 如何根据 SQL Server 中的某个列删除重复项?
- matrix - 如何将四元数转换为角度?
- java - 引起:android.os.RemoteException:远程堆栈跟踪:
- linux - 在 ubuntu bash 脚本中,当我尝试转换错误的十六进制值时不会抛出任何错误
- python - SortBy 仅在“内部列表”中工作一半
- css - 动画迭代计数在 vuejs3 中不起作用?
- linux - elasticsearch 未启动 - 获取 java.lang.IllegalArgumentException:未能执行脚本
- next.js - Strapi,Next.js:无法在 /product 页面中加载产品(集合类型)并通过 id 打开产品
- reactjs - 如何从 React 中的其他组件调用组件中的函数?