【发布时间】:2019-03-14 10:42:24
【问题描述】:
我的应用有 2 个我在 docker-compose 中指定的依赖项,一个 postgres 和 kafka 服务:
services:
postgres:
image: postgres:9.6-alpine
ports:
- "5432:5432"
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
我在 docker 网络外部运行我的代码和测试,并将这两个容器用作我的依赖项。
由于它们都暴露了 端口,我可以配置我的应用程序以通过以下方式访问它们:localhost:5432、localhost:9092。这行得通。
我遇到的问题是,当我想测试应用程序映像本身时,我将其作为服务添加到 docker-compose 文件中:
app:
image: myapp
links:
- postgres
- kafka
应用仍配置为使用 localhost,因此我允许应用容器使用 --net=host
访问我的网络虽然应用程序容器现在可以访问 localhost:5432 和 localhost:9092(通过从容器内部进行 curl 确认),但当代码运行并且依赖项无法访问时,主机名无法解析 - 可能是由于使用 localhost从容器内部并混淆客户端库?我真的不确定。
感觉在应用配置中使用 localhost 不是正确的方法。是否可以从 docker 网络外部引用服务名称“postgres”和“kafka”?
【问题讨论】:
-
一种愚蠢的可能性,您是否尝试将容器的主机名设置为本地计算机的主机名?或者甚至将与本地机器主机相关的
/etc/hosts行添加到docker 内部的/etc/hosts(这可以通过extra_hosts使用docker-compose 来完成)?
标签: docker docker-compose docker-networking