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

Man*_*mar 9 apache-kafka docker docker-compose

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

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

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

Gre*_*Rox 12

使用docker-compose:

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

network_mode: "host"
Run Code Online (Sandbox Code Playgroud)

没有docker-compose:

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

docker run -it --net=host
Run Code Online (Sandbox Code Playgroud)

您还可以使用--network标志

--network="host"
Run Code Online (Sandbox Code Playgroud)

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

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

docker run -t -d myService
docker run -t -d --link myService:myService_ref myOtherService
Run Code Online (Sandbox Code Playgroud)

  • net = host是大锤/不得已/并非最佳做法选项。 (3认同)

Gre*_*Rox 7

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

就像是:

sudo ifconfig lo0 alias 172.16.123.1 
Run Code Online (Sandbox Code Playgroud)

然后在 docker compose 中:

extra_hosts:
 - "service.localhost:172.16.123.1"
Run Code Online (Sandbox Code Playgroud)

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

ping service.localhost
Run Code Online (Sandbox Code Playgroud)