容器之间通过localhost通信

问题描述

我正在尝试容器化一个依赖于 Kafka 的应用程序,但我的应用程序在尝试与 localhost:9092 上的 Kafka 建立连接时遇到了问题,一旦它们在容器中运行。

堆栈有 2 个需要相互通信的容器,它们定义在下面的 docker-compose 文件中。我正在使用 bridge 驱动程序创建一个新的网络 kafka-net

version: '3.0'

networks:
  kafka-net:
    driver: bridge

services:
  spotify-kafka:
    image: 'spotify/kafka'
    container_name: 'spotify-kafka'
    networks:
      - kafka-net
    ports:
      - '2181:2181'
      - '9092:9092'
    environment:
      - ADVERTISED_HOST=localhost
      - ADVERTISED_PORT=9092

  kafkamirror:
    image: 'kafkamirror/kafkamirror'
    container_name: 'kafkamirror'
    networks:
      - kafka-net
    ports:
      - '3000:3000'
      - '8080:8080'
    depends_on:
      - spotify-kafka

通过这种配置,我可以启动两个容器,docker attach 进入 CLI,并从另一个容器 ping 每个容器就好了。 docker network inspect kafka-simulator_kafka-net 为我提供以下信息:

[
    {
        "Name": "kafka-simulator_kafka-net","Id": "a53e3972edc6c67bf6cfa6fdd1fc2c48796e9da1e8cabf0710cb1270eb53a1fe","Created": "2021-01-07T02:42:32.744642052Z","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {
            "Driver": "default","Options": null,"Config": [
                {
                    "subnet": "172.29.0.0/16","Gateway": "172.29.0.1"
                }
            ]
        },"Internal": false,"Attachable": true,"Ingress": false,"ConfigFrom": {
            "Network": ""
        },"ConfigOnly": false,"Containers": {
            "10858507278d74479ca49b9f81c69f1ed71abbaf4915b17168cbce7797427153": {
                "Name": "spotify-kafka","EndpointID": "acb8b94a73205a774aa15a491523ab91f40f5b7fc9e281dfebf6aaa024748035","MacAddress": "02:42:ac:1d:00:02","IPv4Address": "172.29.0.2/16","IPv6Address": ""
            },"c478714194b4d4fea144e277c92952ff576feb37f16dbf831b0da148233cf371": {
                "Name": "kafkamirror","EndpointID": "fe2be0eae705b4728c4153bc07e8d00f330dc7d24931590754416888c4efad26","MacAddress": "02:42:ac:1d:00:03","IPv4Address": "172.29.0.3/16","IPv6Address": ""
            }
        },"Options": {},"Labels": {
            "com.docker.compose.network": "kafka-net","com.docker.compose.project": "kafka-simulator","com.docker.compose.version": "1.27.4"
        }
    }
]

容器似乎在同一个网络上并且可以相互通信,但是在我的应用程序代码中,我尝试使用 localhost:9092 创建到 Kafka 的连接,但它没有一旦它们被容器化就可以工作,因为它们具有不同的 IP 地址。我试过使用“主机”驱动程序但没有成功。

关于如何在容器化后与 Kafka 建立连接的任何想法?有没有办法静态设置 IP 地址或以某种方式在启动时使用 docker 命令检索分配的 IP 地址并在我的应用程序代码中进行设置?我只是不确定在我的应用程序代码中使用什么 IP 地址。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)