无法连接到在单独的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:
答案 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服务的服务发现系统。