使用 Docker 找不到 Kafka 和 Zookeeper 脚本

Kafka and Zookeeper Scripts Not Found Using Docker

详细信息: 我正在尝试使用 docker-compose.yml 文件 运行 wurstmeister/kafka and wurstmeister/zookeeper 图像,附加在这个post.

的底部

为了测试容器,我遵循了official site of kafka。它指的是图像中不可用的某些脚本,例如 bin/kafka-server-start.sh。我还尝试使用 docker exec -it zookeeper bashdocker exec -it kafka bash 遍历容器,并在 /bin/ 目录中找到 zkServer.sh 和其他一些脚本。

问题:问题是我不知道如何使用它,因为config/server.properties在kafka容器而不是zookeeper中可用。所以我不知道正确的解决方案。下载脚本放到宿主机目录下复制到容器里是不是一个好的方案?

docker-compose.yml

version:'2'

services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"

  kafka:
    build: .
    container_name: kafka
    links:
     - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_OPTS: -javaagent:/usr/app/jmx_prometheus_javaagent.jar=7071:/usr/app/prom-jmx-agent-config.yml
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Dockerfile

FROM wurstmeister/kafka

ADD prom-jmx-agent-config.yml /usr/app/prom-jmx-agent-config.yml
ADD jmx_prometheus_javaagent-0.10.jar /usr/app/jmx_prometheus_javaagent.jar

您不必使用 bin/kafka-server-start.sh 脚本。 wurstmeister/kafka 图像中有一个名为 start-kafka.sh 的脚本。以下是我在我的一个项目中的做法:

docker-compose.yml

zookeeper:
    container_name: zookeper
    image: wurstmeister/zookeeper:3.4.6
    ports:
    - "2181:2181"
  kafka:
    container_name: kafka
    build:
      context: .
      dockerfile: kafka.Dockerfile
    image: kafka-service
    ports:
        - "9092:9092"

kafka.Dockerfile

FROM wurstmeister/kafka:2.11-2.0.0
COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh
CMD ["/wait-for-it.sh", "zookeper:2181", "--", "start-kafka.sh"]

在 dockerfile 中,我基本上说:"Wait for zookeeper, he has to be up first,then you can start, then after him, run start-kafka.sh"。您可以在此处下载 wait-for-it.sh 脚本:https://github.com/vishnubob/wait-for-it/blob/master/wait-for-it.sh

PS: 您可以使用以下命令查看任何图像的基本信息:

docker inspect <image-name>