【问题标题】:docker-compose command giving error in kafka-zookeeper setupdocker-compose 命令在 kafka-zookeeper 设置中出错
【发布时间】:2018-04-24 22:27:15
【问题描述】:

我正在尝试将 kafka 与 zookeeper 同步,为此我将两个文件保存在以下路径中:

root@sevenos:/home/sevenos/Downloads/dockerrun# ls -l
total 80
-rw-rw-r-- 1 sevenos sevenos   816 Apr 24 17:12 docker-compose.yml
drwxr-xr-x 3 root    root     4096 Apr 24 15:35 scripts
-rwxrwxr-x 1 sevenos sevenos 55842 Apr 24 17:01 wait-for.sh

wait-for.sh 是取自Eficode 的脚本,它检查主机和端口的可用性,并且在本地运行良好。 docker-compose 文件包含以下内容:

    version: "2.1"
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:4.0.0
    restart: always
    hostname: host
    container_name: zookeeper
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT: 32181
      ZOOKEEPER_TICK_TIME: 2000
    volumes:
      - $PWD/scripts/security:/etc/kafka/secrets

    ports:
      - "32181:32181"

  kafka:
    image: modkafka
    hostname: host
    container_name: kafka
    depends_on:
      - zookeeper
    command: sh -c '/subdir/wait-for.sh localhost:32181'
    volumes:
      - $PWD/scripts/security:/etc/kafka/secrets
      - ./subdir:/subdir
    ports:
      - "29092:29092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: "localhost:32181"
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:29092"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

当我触发这个撰写文件时,kafka 之前被触发并且我收到以下错误:

kafka        |   export KAFKA_LISTENERS
kafka        |   KAFKA_LISTENERS=$(cub listeners "$KAFKA_ADVERTISED_LISTENERS")
kafka        | fi
kafka        | + [[ -z '' ]]
kafka        | + export KAFKA_LISTENERS
kafka        | cub listeners "$KAFKA_ADVERTISED_LISTENERS"
kafka        | ++ cub listeners 'PLAINTEXT://localhost:29092"'
zookeeper    | sh: 1: ./wait-for: not found
zookeeper    | sh: 1: ./wait-for: not found
zookeeper    | sh: 1: ./wait-for: not found
kafka        | + KAFKA_LISTENERS='PLAINTEXT://0.0.0.0:29092"'
kafka        | 
kafka        | dub path /etc/kafka/ writable
kafka        | + dub path /etc/kafka/ writable
zookeeper exited with code 127

更新

我为 kafka 创建了新的 dockerfile,其中提到了以下内容:

FROM confluentinc/cp-kafka:4.0.0
RUN mkdir subdir

并按照以下方式构建它:

docker build -t modkafka .

问题仍然存在。

对 modkafka 执行 bash 会导致以下输出:

root@sevenos:/home/sevenos/Downloads/dockerrun# docker exec -it kafka bash
root@sevenos:/# ls
bin   dev  home  lib64  mnt  proc  run   srv     sys  usr
boot  etc  lib   media  opt  root  sbin  subdir  tmp  var
root@sevenos:/# cd subdir

更新 docker-compose.yml 文件:

version: "2.1"
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:4.0.0
    restart: always
    hostname: host
    container_name: zookeeper
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT: 32181
      ZOOKEEPER_TICK_TIME: 2000
    volumes:
      - $PWD/scripts/security:/etc/kafka/secrets

    ports:
      - "32181:32181"

  kafka:
    image: modkafka
    hostname: host
    container_name: kafka
    depends_on:
      - zookeeper
    command: sh -c '/subdir/wait-for.sh localhost:32181'
    volumes:
      - $PWD/scripts/security:/etc/kafka/secrets
      - ./subdir:/subdir
    ports:
      - "29092:29092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: "localhost:32181"
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:29092"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

【问题讨论】:

    标签: docker apache-kafka docker-compose apache-zookeeper


    【解决方案1】:

    您需要将脚本wait-for.sh 包含到容器中。

    为此,您可以在容器内挂载包含脚本的目录。我建议将wait-for.sh 移动到一个目录中,以确保容器不会从主机访问任何其他内容。假设您将脚本移动到subdir,那么您的撰写文件应如下所示:

    version: "2.1"
    services:
      zookeeper:
        image: confluentinc/cp-zookeeper:4.0.0
        restart: always
        hostname: host
        container_name: zookeeper
        environment:
          ZOOKEEPER_SERVER_ID: 1
          ZOOKEEPER_CLIENT_PORT: 32181
          ZOOKEEPER_TICK_TIME: 2000
        volumes:
          - $PWD/scripts/security:/etc/kafka/secrets
        ports:
          - "32181:32181"
      kafka:
        image: confluentinc/cp-kafka:4.0.0
        hostname: host
        container_name: kafka
        depends_on:
          - zookeeper
        volumes:
          - $PWD/scripts/security:/etc/kafka/secrets
          - ./subdir:/subdir
        ports:
          - "29092:29092"
        command: sh -c '/subdir/wait-for.sh localhost:32181'
        environment:
          KAFKA_ZOOKEEPER_CONNECT: "localhost:32181"
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:29092"
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    

    【讨论】:

    • 这个“命令”会出现在kafka部分还是zookeeper部分?
    • @UtkarshSaraf 在您使用脚本的部分;在你的情况下,我看到你在 zookeeper 中使用它。
    • 好吧..我可能不好..但由于kafka必须等待zookeeper,所以我觉得这应该出现在kafka部分..你的意见?
    • @UtkarshSaraf 在这种情况下,是的,在 kafka 部分。
    • 我已经更新了 docker-compose.yml 文件。仍然错误 kafka | sh: 1: /subdir/wait-for.sh: 未找到
    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 2017-08-20
    • 2021-04-24
    • 2018-10-19
    • 2018-01-11
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    相关资源
    最近更新 更多