【问题标题】:unable to start kafka and zookeeper using docker; ports 9092 and 2181 are already allocated无法使用 docker 启动 kafka 和 zookeeper;端口 9092 和 2181 已分配
【发布时间】:2025-12-27 17:20:23
【问题描述】:

我正在尝试使用这个 docker 文件来启动 kafka 和 zookeeper

    version: '2'

services:
  kafka:
    image: landoop/fast-data-dev:cp3.3.0
    hostname: kafka-host
    ports:
      - 29092:29092
      - 3030:3030                 # Landoop UI
      - 8081-8083:8081-8083       # REST Proxy, Schema Registry, Kafka Connect ports
      - 9581-9585:9581-9585       # JMX Ports
      - 2181:2181                 # Zookeeper
      - 9092:9092                 # Kafka Broker
    environment:
      ADV_HOST: 127.0.0.1         
      RUNTESTS: 0                 
      FORWARDLOGS: 0              
      SAMPLEDATA: 0  

但我不断收到此错误消息

Cannot start service kafka: b'driver failed programming external connectivity on endpoint kafka-docker_kafka_1 (a741da2d21a00bb752fc169d579fa39bcdeef0cc88ec560d2e93b8fd287b8b5a): Error starting userland proxy: Bind for 0.0.0.0:9092 failed: port is already allocated'

即使在我删除了所有图像和容器之后...

与“sudo lsof -i tcp:9092

我看到一些进程正在进行......但即使在我杀死它们之后,使用 kill -9 PIDsome other 出现......

【问题讨论】:

  • 进程名如下:XmlIpcRegSvc
  • 这样做可能会解决您的问题 1.docker rm $(docker ps -aq) 然后 2.stop docker daemon 3.sudo rm /var/lib/docker/network/files/local -kv.db 4. 启动 docker daemon 并重新创建你的容器
  • @ShashankPai 不确定是否真的需要步骤 2、3 和 4。
  • @norbjd 。 judy 提到即使在删除所有图像和容器后问题仍然存在。因此其他步骤
  • 使用pwdx [PID] 查找该重复过程的工作目录,如果不再需要则将其删除

标签: macos docker apache-kafka port


【解决方案1】:

我解决了问题; kafka 和 zookeeper 实际上已经安装在本地,brew 在后台运行它们......当我卸载它们时,一切都很好!

【讨论】:

  • 这对我有帮助,但我需要做的就是停止这些服务的运行。 brew services stop kafka && brew services stop zookeeper
【解决方案2】:

您的一个容器似乎仍在使用端口 9092(如sudo lsof -i tcp:9092 所示)。运行 docker ps 以确保没有容器正在使用此端口运行。

此外,使用kill -9 命令停止容器不是正确的方法:

  • 如果您使用docker-compose(如您的示例所示),您可以运行docker-compose down 来停止所有服务(因此所有在您的文件中定义的容器)。或者,如果您只想使用 docker 命令关闭容器,则必须运行 docker stop <container_id_or_name>,但如果您使用的是 docker-compose,我不建议这样做
  • 当您发出kill -9 命令时,您会遇到容器反复重启的情况,因为您可能已经为您的服务定义了重启策略 (https://docs.docker.com/compose/compose-file/compose-file-v2/#restart)。另一个容器退出后启动的容器(由kill -9 引起)使用与前一个相同的端口,因此始终使用端口 9092

【讨论】:

  • 当我运行“docker ps -a”时,它是空的,所以看起来没有其他容器在运行......
最近更新 更多