Docker Настройка - Сеть между несколькими контейнерами - PullRequest
1 голос
/ 28 января 2020

На моем linux сервере я запускаю 3 изображения -

A) Docker и Zookeeper с этим docker -композитным файлом -

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    ports:
     - "2181:2181"
  kafka:
    image: wurstmeister/kafka:2.11-2.0.0
    ports:
     - "9092:9092"
    expose:
     - "9093"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 

Это откроет подключить брокер kafka к хост-компьютеру.

B) JupyterHub

docker run -v /notebooks:/notebooks -p 8000:8000 jupyterhub

C) Реестр схемы Confluent Schema (я еще не пробовал, но в окончательной настройке у меня будет контейнер реестра схемы)

docker run confluentinc/cp-schema-registry

Оба запускаются без проблем. Но как мне открыть контейнер jupyterhub для портов реестра и контейнера kafka, чтобы мои скрипты python могли обращаться к брокерам.

Ответы [ 2 ]

1 голос
/ 28 января 2020

Если вы запустите docker network ls, вы сможете найти имя сети, которую Compose создаст для вас ; будет названо что-то вроде directoryname_default. Затем вы можете запустить контейнеры, подключенные к этой сети,

docker run --net directoryname_default confluentinc/cp-schema-registry

Если вы можете включить эти файлы в один файл docker-compose.yml, вам не нужно будет делать ничего особенного. В частности, это, вероятно, имеет смысл для реестра схемы Confluent, который можно считать основной частью стека Kafka, если вы используете сообщения Avro.

Вы можете использовать Docker Имя службы Compose kafka в качестве имени хоста, но так как вам нужно подключиться к «внутреннему» слушателю, вам нужно настроить порт 9093, отличный от порта по умолчанию. (Директива Docker Compose expose: мало что делает, и вы можете безопасно удали это.)

1 голос
/ 28 января 2020

Я предполагаю, что вы хотите запускать свой контейнер для ноутбука jupyter по требованию, тогда как ваши контейнеры zookeeper и kafka всегда будут работать отдельно? Вы можете создать docker сеть и присоединить все контейнеры к этой сети. Тогда ваши контейнеры смогут разрешать друг друга по именам.

  1. Создать сеть
  2. Укажите эту сеть в файле составления
  3. При запуске других контейнеров с помощью docker run, используйте --network вариант.
...