Команда docker-compose выдает ошибку в настройке kafka-zookeeper - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь синхронизировать 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

UPDATE

Я создал новый докер-файл для kafka, в котором упоминаются следующие вещи:

FROM confluentinc/cp-kafka:4.0.0
RUN mkdir subdir

и создайте его следующим образом:

docker build -t 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

1 Ответ

0 голосов
/ 24 апреля 2018

Вам необходимо включить скрипт 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
...