首页 > 解决方案 > 从主机 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而不是使用服务名称是一种好方法吗?

标签: dockerdocker-compose

解决方案


第一个问题,是的,只要确保端口是公开的并且可以从另一台主机访问。

第二个问题,你仍然可以这样做(在一个环境中写下主机 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

推荐阅读