如何从Docker服务连接外部服务

7

我是Docker的新手。我正在我的本地机器上运行PostgreSQL(即在Mac OS上)。我的应用程序在Docker中运行。我想要的是,我的应用程序应该能够从Docker中访问PostgreSQL(其中有很多生产数据,不能在Docker上运行)服务。怎么做?有人可以给我提供一个这样做的示例吗?


你找到解决问题的方法了吗? - tgogos
是的。我明白了。@tgogos - Sunder
然后,如果您发布自己的问题并接受自己的答案(供未来用户使用),那就没问题了。更多信息请参见:我可以回答自己的问题吗? - tgogos
3个回答

5

最终,我找到了一种在docker中链接外部服务的解决方案。在docker-compose.yaml中添加以下行:

    extra_hosts:
       my-local-host: 10.0.0.10 #Local machine IP
     environment:
       - SERVER=http://my-local-host:3000

这个 docker-compose 是独立的还是与 Docker Swarm 兼容的? - Vinigas
上面这段代码是关于 docker-compose.yaml 的。@Vinigas - Sunder
7
希望这能更详细些。 - Daniel Dolz

2
在我的情况下(我在Ubuntu上运行Docker),有一个名为docker0的网络接口,主机使用IP 172.17.0.1。每个连接到默认网络的容器都会获得172.17.0.X范围内的IP。这样,容器可以通过与172.17.0.1[:port]通信来访问在主机上运行的服务,因为它们在同一网络上...
但是,在Mac上,情况就不同了...
来自:Docker for Mac中的网络功能

已知限制、用例和解决方法

以下是Docker for Mac网络堆栈当前的限制摘要,以及一些解决方法的想法。 在macOS上没有docker0桥接

由于Docker for Mac中实现网络的方式,您无法在macOS上看到docker0接口。该接口实际上位于HyperKit中。

用例和解决方法

我想从容器连接到主机上的服务

Mac具有可变的IP地址(如果您没有网络访问,则没有IP地址)。从17.12开始,我们建议连接到特殊的仅限Mac的DNS名称docker.for.mac.host.internal,该名称解析为主机使用的内部IP地址。


0
另一种解决方案是您可以在“主机”网络中运行您的应用程序。例如,在您的Compose文件中,在服务下设置“network-mode: host”。容器应用程序将加入本地机器网络,而不是创建网络,因此所有服务可以直接通信,无需端口映射。
services:
  my_app:
    build: .
    image: my_app:latest
    network_mode: host

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接