Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 来自Docker的Neo4j和Spark的ServiceUnavailableException_Apache Spark_Docker_Neo4j_Dockerfile - Fatal编程技术网

Apache spark 来自Docker的Neo4j和Spark的ServiceUnavailableException

Apache spark 来自Docker的Neo4j和Spark的ServiceUnavailableException,apache-spark,docker,neo4j,dockerfile,Apache Spark,Docker,Neo4j,Dockerfile,我已经为我的应用程序创建了一个Docker映像,它与Spark Streaming、Kafka、ElasticSearch和Kibana一起运行。我把它打包成一个可执行的jar文件。当我使用此命令运行应用程序时,一切正常(数据开始生成): 然而,当我从docker运行它时,我得到一个连接到Neo4j的错误,尽管数据库是从docker compose文件运行的: INFO: Closing connection pool towards localhost:7687 Exception in th

我已经为我的应用程序创建了一个Docker映像,它与Spark Streaming、Kafka、ElasticSearch和Kibana一起运行。我把它打包成一个可执行的jar文件。当我使用此命令运行应用程序时,一切正常(数据开始生成):

然而,当我从docker运行它时,我得到一个连接到Neo4j的错误,尽管数据库是从docker compose文件运行的:

INFO: Closing connection pool towards localhost:7687
Exception in thread "main" org.neo4j.driver.v1.exceptions.ServiceUnavailableException: Unable to connect to localhost:7687, ensure the database is running and that there is a working network connection to it.
version: '3.3'
services:

  kafka:
    image: spotify/kafka
    ports:
     - "9092:9092"
    environment:
    - ADVERTISED_HOST=localhost
  neo4j_db:
    image: neo4j:latest
    ports:
      - "7474:7474"
      - "7473:7473"
      - "7687:7687"
    volumes:
      - /var/lib/neo4j/import:/var/lib/neo4j/import
      - /var/lib/neo4j/data:/data
      - /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 run -v my-volume:/workdir -w /workdir container-name
什么会导致这个问题?我应该在Dockerfile中更改什么来执行此应用程序

以下是Dockerfile:

FROM java:8
ARG ARG_CLASS
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

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" 
这是一个docker compose文件:

INFO: Closing connection pool towards localhost:7687
Exception in thread "main" org.neo4j.driver.v1.exceptions.ServiceUnavailableException: Unable to connect to localhost:7687, ensure the database is running and that there is a working network connection to it.
version: '3.3'
services:

  kafka:
    image: spotify/kafka
    ports:
     - "9092:9092"
    environment:
    - ADVERTISED_HOST=localhost
  neo4j_db:
    image: neo4j:latest
    ports:
      - "7474:7474"
      - "7473:7473"
      - "7687:7687"
    volumes:
      - /var/lib/neo4j/import:/var/lib/neo4j/import
      - /var/lib/neo4j/data:/data
      - /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

来自错误消息-您正试图连接到应用程序本地的
localhost
,而不是运行应用程序的主机。您需要连接到Docker网络中正确的主机名-您不需要将所有端口映射到主机,只需检查同一网络中的所有Docker映像。

我知道我连接到了错误的主机。但如何检查我实际需要连接的主机?您需要按照中所述正确配置网络,然后使用主机名连接到正确的主机。您可以通过在特定服务的定义中添加
hostname
来显式设置它。或者您可以通过
docker network inspect network name