我正在尝试为2个容器创建一个网络 - 我的应用程序和数据库,然而,neo4j是在localhost启动的,而应用程序容器无法连接到数据库。 如何更改此映射并为这些容器创建网络?
我得到的错误:
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.
Caused by: org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:7687
我的docker-compose文件:
version: '3.3'
services:
benchmarks:
image: "container-name"
volumes:
- ./:/workdir1
working_dir: /workdir1
links:
- "neo4j_db"
networks:
- backend
neo4j_db:
image: neo4j:latest
ports:
- "7474:7474"
- "7473:7473"
- "7687:7687"
volumes:
- $HOME/neo4j/import:/var/lib/neo4j/import
- $HOME/neo4j/data:/neo4j/data
- $HOME/neo4j/conf:/neo4j/conf
- $HOME/neo4j/logs:/neo4j/logs
environment:
- NEO4J_dbms_active__database=db.db
networks:
- backend
networks:
backend:
driver: "bridge"
这是此应用程序的Dockerfile:
FROM java:8
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 NEO4J_CONFIG neo4j_local
ENV BENCHMARK_NAME read_spark_single
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 7474 7687 7473
VOLUME /workdir1
CMD /workdir1/runapp.sh "$NEO4J_CONFIG" "$BENCHMARK_NAME"
答案 0 :(得分:1)
localhost
,它始终映射到127.0.0.1 - 这是应用程序运行的容器。
只需调整您的应用程序配置文件即可连接到neo4j_db
主机名上的数据库。 Docker将负责将其指向适当的容器IP。此外,您不需要将端口发布到docker主机。
请记住,localhost将始终在任何情况下(除非您故意修改它)表示运行调用命令的主机。
使用容器时,每个应用程序都在自己的主机(容器)上。这就是您无法使用localhost的原因。您需要将运行docker的主机和所有其他容器视为某个网络上的远程计算机。