Подключить файлы docker-compose к общей сети

У меня есть отдельные файлы docker-compose с общими конфигурациями и конфигурациями приложений. Я хочу подключить контейнеры, определенные в обоих файлах docker-compose, к общей сети, которая определена в docker-compose.yml с изображениями приложения. Мне это нужно для подключения к базе данных на хосте контейнера. Как я могу определить ту же сеть в другом файле docker-compose-Producer или могу?

Мой общий docker-compose.yml выглядит так:

  version: '3.3'
    services:
      kafka:
        image: spotify/kafka
        ports:
         - "9092:9092"
        networks:
          - docker-elk
        environment:
        - ADVERTISED_HOST=localhost
      neo4jdb:
        image: neo4j:latest
        container_name: neo4jdb
        ports:
          - "7474:7474"
          - "7473:7473"
          - "7687:7687"
        networks:
          - docker-elk
        volumes:
          - /var/lib/neo4j/import:/var/lib/neo4j/import
          - /var/lib/neo4j/data:/datax
          - /var/lib/neo4j/conf:/conf
        environment:
          - NEO4J_dbms_active__database=graphImport.db
      elasticsearch:
        image: elasticsearch:latest
        ports:
          - "9200:9200"
          - "9300:9300"
        networks:
          - docker-elk
        volumes:
            - esdata1:/usr/share/elasticsearch/data
      kibana:
        image: kibana:latest
        ports:
          - "5601:5601"
        networks:
          - docker-elk
    volumes:
      esdata1:
        driver: local

networks:
  docker-elk:
    driver: bridge

Мой файл docker-compose-продюсера:

    version: '3.3'
    services:
      producer-demo:
        build:
          context: .
          dockerfile: Dockerfile
          args:
            - ARG_CLASS=producer
            - HOST=neo4jdb
        volumes:
          - ./:/workdir
        working_dir: /workdir
        networks:
      - common_docker-elk

networks:
  common_docker-elk:
    external: true

Dockerfile:

FROM java:8
ARG ARG_CLASS
ARG HOST
ARG SPARK_CONFIG
ARG NEO4J_CONFIG
ENV MAIN_CLASS $ARG_CLASS
ENV SCALA_VERSION 2.11.8
ENV SBT_VERSION 1.1.1
ENV SPARK_VERSION 2.2.0
ENV SPARK_DIST spark-$SPARK_VERSION-bin-hadoop2.6
ENV SPARK_ARCH $SPARK_DIST.tgz
ENV SPARK_MASTER $SPARK_CONFIG
ENV DB_CONFIG neo4j_local
ENV KAFKA_STREAMS_NUMBER 5
ENV KAFKA_EVENTS_NUMBER 10
ENV MESSAGES_BATCH_SIZE 16777216
ENV LINGER_MESSAGES_TIME 5
ENV HOSTNAME bolt://$HOST:7687

VOLUME /workdir

WORKDIR /opt

# Install Scala
RUN \
  cd /root && \
  curl -o scala-$SCALA_VERSION.tgz http://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz && \
  tar -xf scala-$SCALA_VERSION.tgz && \
  rm scala-$SCALA_VERSION.tgz && \
  echo >> /root/.bashrc && \
  echo 'export PATH=~/scala-$SCALA_VERSION/bin:$PATH' >> /root/.bashrc

# Install SBT
RUN \
  curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
  dpkg -i sbt-$SBT_VERSION.deb && \
  rm sbt-$SBT_VERSION.deb


# Install Spark
RUN \
    cd /opt && \
    curl -o $SPARK_ARCH http://d3kbcqa49mib13.cloudfront.net/$SPARK_ARCH && \
    tar xvfz $SPARK_ARCH && \
    rm $SPARK_ARCH && \
    echo 'export PATH=$SPARK_DIST/bin:$PATH' >> /root/.bashrc


EXPOSE 9851 9852 4040 9092 9200 9300 5601 7474 7687 7473

CMD /workdir/runDemo.sh "$MAIN_CLASS" "$SPARK_MASTER" "$DB_CONFIG" "$KAFKA_STREAMS_NUMBER" "$KAFKA_EVENTS_NUMBER" "$MESSAGES_BATCH_SIZE" "$LINGER_MESSAGES_TIME"

Bash-скрипт для загрузки проекта:

#!/usr/bin/env bash
if [ "$1" = "consumer" ]
then
    java -cp "jars/spark_consumer.jar" consumer.SparkConsumer $2 $3 $4
elif [ "$1" = "producer" ]
then
    java -cp "jars/kafka_producer.jar" producer.KafkaCheckinsProducer $5 $3 $6 $7
else
    echo "Wrong parameter. It should be consumer or producer, but it is $1"
fi

person Cassie    schedule 29.06.2018    source источник


Ответы (1)


Похоже, вы хотите общаться между несколькими докерами.

Проверьте этот ответ, Обмен данными между несколькими проектами создания докеров

Обновление:

Я только что заметил, что имя хоста не определено для neo4jdb в файле docker-compose.

Добавьте hostname: neo4jdb в раздел сборки neo4jdb в файле docker-compose.yml.

person Rohit Jindal    schedule 29.06.2018
comment
Другой файл по-прежнему не может использовать neo4jdb в качестве хоста, хотя я создаю сеть между контейнерами на основе ответа на вопрос - person Cassie; 29.06.2018
comment
не могли бы вы предоставить обновленный файл сборки Docker и используемый DockerFile? - person Rohit Jindal; 29.06.2018
comment
Конечно. Я обновил docker-compose и добавил Dockerfile - person Cassie; 29.06.2018
comment
пожалуйста, измените конфигурацию сети в обоих файлах. в docker-compose.yml {networks: docker-elk: driver: bridge} и в docker-compose -roduct.yml {network: common_docker-elk: external: true} .. я пытаюсь создать проблему в своей системе, но застрял, так как не имеет rundemo.sh .. пожалуйста, попробуйте после внесения предложения изменений. - person Rohit Jindal; 29.06.2018
comment
Я попытался обойтись (несмотря на CMD runDemo.sh, я дал CMD sleep 10000, так что контейнер может подняться). Затем я подключился к контейнеру и выполнил команду ping neo4jdb, и он успешно разрешил сервер. - person Rohit Jindal; 29.06.2018
comment
По какой-то причине это не работает, и я получаю такую ​​ошибку: ServiceUnavailableException: Unable to connect to neo4jdb:7687 - person Cassie; 30.06.2018
comment
В порядке. Тогда не могли бы вы также предоставить runDemo.sh. И еще один вопрос, если я не ошибаюсь, сначала запустите docker-compose.yml, а затем docker-compose-продюсер.yml. пожалуйста, поправьте меня, если я ошибаюсь. Еще одна вещь: тот, кто запускает первый, запустит сеть и будет иметь сетевой драйвер, а второй подключится к той же сети, что и внешняя. - person Rohit Jindal; 30.06.2018
comment
Правильно, я сначала запускаю docker-compose, а затем запускаю docker-compose-продюсер. Я добавил свой сценарий bash и обновил файлы docker-compose в вопросе - person Cassie; 01.07.2018
comment
обновил ответ (надеюсь решит вопрос). Я протестировал решение с каким-то проектом git-hub neo4j. Пожалуйста, дайте мне знать, если все еще не сработало. Я предоставлю вам всю настройку, которую я тестировал, со всеми шагами. Кроме того, просто хочу подтвердить, что вы запускаете оба набора на одном хосте (а не как разные системы в одной сети). - person Rohit Jindal; 01.07.2018
comment
Да, это все еще не работает. Как я могу проверить, работают ли они на одном хосте? С помощью docker-inspect? - person Cassie; 02.07.2018
comment
Я надеюсь, что вы создаете свежие образы из Docker compose и сначала обновляете пароль neo4jdb, а затем запускаете образ производителя. Когда-нибудь я расскажу, что и как я тестировал. Я использовал ваши файлы как есть, но сосредоточился только на neo4jdb. - person Rohit Jindal; 02.07.2018
comment
посетите github.com/rjindalrohit/neo4jdb_docker_shared_network.git. шаги, указанные в файле Readme - person Rohit Jindal; 02.07.2018