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

时间:2017-03-08 11:19:46

标签: docker apache-kafka docker-compose

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

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

有人可以帮我解决问题吗?

3 个答案:

答案 0 :(得分:9)

使用docker-compose:

使用network_mode选项允许连接到localhost端口

network_mode: "host"

没有docker-compose:

使用--net标志允许连接到localhost端口

docker run -it --net=host

您也可以使用--network flag

--network="host"

根据官方Docker文档,这些"使容器可以完全访问本地系统服务,例如D-bus,因此被认为是不安全的。"

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

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

答案 1 :(得分:2)

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

类似的东西:

sudo ifconfig lo0 alias 172.16.123.1 

然后在docker撰写:

extra_hosts:
 - "service.localhost:172.16.123.1"

然后在容器内你应该能够:

ping service.localhost

答案 2 :(得分:1)

从容器连接到本地计算机。为本地主机设置IP别名

sudo ifconfig lo:0 172.18.1.1 up

添加到docker-compose配置服务行

extra_hosts:
      - 'local.machine:172.18.1.1'

在容器重启后,它可以用于连接

'web-socket-server' => 'ws://172.18.1.1',