如何使用docker-compose从Docker容器连接到localhost:9092而不使用docker bridge

我正在我的本地计算机上运行Kafka服务器在端口9092上。我正在Docker 容器中使用docker-compose运行服务,该服务需要将消息发送到kafka服务器。

我尝试使用“localhost”和IP编写服务代码的生产者,但两者都不起作用。

任何人都可以帮助我解决这个问题?

用docker工具撰写:

使用network_mode选项来允许连接到本地主机端口

network_mode: "host" 

没有docker组成:

使用–net标志来允许连接到本地主机端口

 docker run -it --net=host 

你也可以使用–network标志

 --network="host" 

根据官方Docker文档,这些“给容器充分访问本地系统服务,如D-bus,因此被认为是不安全的。”

当然,如果你使用localhost:9092运行你的服务,那么你也可以在Docker容器中运行它,并使用–link标志链接你的两个Docker容器:

 docker run -t -d myService docker run -t -d --link myService:myService_ref myOtherService 

您可以修复您的主机的IP地址,并通过docker-compose使用'extra_hosts'选项将其传递给docker:

就像是:

 sudo ifconfig lo0 alias 172.16.123.1 

然后在docker撰写:

 extra_hosts: - "service.localhost:172.16.123.1" 

然后在容器内,您应该能够:

 ping service.localhost