如何将我的Docker容器(前端)连接到在不同VM上运行的容器化数据库

时间:2019-01-16 23:32:49

标签: docker docker-compose

无法连接到在单独的Docker主机上运行的容器

我有2个docker Tomcat容器在2个不同的Ubuntu vm上运行。系统A具有正在运行的Web服务,而系统B具有db。我还无法弄清楚如何将在系统A上运行的应用程序连接到在系统B上运行的数据库。当我在系统A上运行数据库时,该应用程序(也在系统A上运行)可以连接到数据库。我正在使用docker-compose设置网络(当两个容器都在同一个VM上运行时,它工作正常)。我已经执行了系统A上应用程序容器中的etc / hosts文件,我认为系统B的IP地址丢失了。

services:
  db:
    image: mydb
    hostname: mydbName
    ports:
      - "8012: 8012"
    networks:
     data:
       aliases:
        - mydbName
   api:
     image: myApi
     hostname: myApiName
     ports:
        - "8810: 8810"
     networks:
       data:
networks:
  data:

1 个答案:

答案 0 :(得分:0)

您将以与不参与Docker时完全相同的方式进行配置:使用另一台服务器的DNS名称或IP地址配置Tomcat实例。您需要使用ports:指令来确保该服务在Docker空间之外发布。

server-a.example.com上,您可以运行以下docker-compose.yml文件:

version: '3'
services:
  api:
    image: myApi
    ports:
      - "8810:8810"
    env:
      DATABASE_URL: "http://server-b.example.com:8012"

server-b.example.com上:

version: '3'
services:
db:
  image: mydb
  ports:
    - "8012:8012"

原则上,可以建立一个overlay network连接两个主机,但这是一个非常复杂的设置。

(您绝对不希望使用docker exec来修改容器中的/etc/hosts:每次删除和重新创建容器并手动维护主机文件时,都必须重复此步骤非常繁琐且容易出错,尤其是如果您在主机之间移动容器。Consul可以用作提供DNS服务的服务发现系统。