无法使用docker启动kafka和zookeeper;端口9092和2181已分配

时间:2018-10-27 14:31:16

标签: macos docker apache-kafka port

我正在尝试使用此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 PID也会出现其他一些事情……

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您的一个容器似乎仍在使用端口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