【问题标题】:Change containers host mappings Docker-compose更改容器主机映射 Docker-compose
【发布时间】:2018-06-19 05:29:53
【问题描述】:

我正在尝试为 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"

【问题讨论】:

  • 这是 stackoverflow.com/questions/50862769/… 的副本 - 不要使用 localhost - 使用服务名称。
  • @Miq 我该如何更改?我认为网络中的容器应该默认连接到彼此的主机名

标签: docker docker-compose dockerfile docker-networking


【解决方案1】:

正如你所说 - docker 允许你通过主机名连接到其他主机。您的应用程序正在尝试连接到 localhost,它始终映射到 127.0.0.1 - 这是应用程序运行所在的容器。

只需调整您的应用程序配置文件以连接到neo4j_db 主机名上的数据库。 Docker 将负责将其指向适当的容器 IP。此外,您不需要将端口发布到 docker 主机。

请记住,在任何情况下(除非您故意修改它),localhost 始终是指运行调用命令的主机。

使用容器时,每个应用程序都在自己的主机(容器)上。这就是您不能使用 localhost 的原因。您需要将运行 docker 的主机和所有其他容器视为某个网络上的远程机器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多