【问题标题】:How do I tell my dockerised Spring Boot Neo4J application to talk to my Neo4j server?如何告诉我的 dockerised Spring Boot Neo4J 应用程序与我的 Neo4j 服务器通信?
【发布时间】:2019-01-18 02:52:12
【问题描述】:

我有一个“开箱即用”的 Spring Data Neo4j 应用程序,它在与运行在我的盒子上的 Neo4j 服务器通信时可以正常工作。 “开箱即用”是指我在应用程序中所做的唯一配置是指定 Neo4j 的用户名和密码。

该应用程序(使用 ./gradlew bootRun 运行)也可以在 dockerised Neo4j 服务器上正常工作。

当我为这个应用构建一个 docker 镜像时,它无法连接到 Neo4j 服务器,无论它是否被 dockerised。

当它起作用时,它会说:

2019-01-18 12:58:49.311 INFO 18345 --- [restartedMain] 驱动程序:为服务器地址 localhost:7687 创建的直接驱动程序实例 1080149308

当它不起作用时,它会说:

2019-01-18 02:27:53.760 INFO 1 --- [main] Driver : 为服务器地址 localhost:7687 创建的直接驱动程序实例 707892422

2019-01-18 02:27:54.100 INFO 1 --- [main] ConnectionPool : 关闭连接池到 localhost:7687

[...]

原因:org.neo4j.driver.internal.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException:连接被拒绝:localhost/127.0.0.1:7687

我尝试使用 --link 链接两个 docker(app 和 Neo4j docker)。结果一样。

我尝试过编写它们:

version: '3'

services:
  docker-neo:
    image: neo4j:3.5
    ports:
      - 7687:7687
      - 7474:7474

  godojo:
    image: com.greenasjade.j01/j01
    depends_on:
      - docker-neo
    ports:
      - 8081:8081

不开心。

我最终需要一个 dockerised 解决方案。

【问题讨论】:

    标签: spring-boot docker spring-data-neo4j


    【解决方案1】:

    请参阅此答案,它指的是 MySQL,但解释了网络问题。

    From inside of a Docker container, how do I connect to the localhost of the machine?

    不过,如果您使用的是 linux,请添加 --network="host",如果您使用的是 windows 或 mac,请将您的 Spring Boot 配置中的 neo4j 主机更改为 host.docker.internal。编辑您的 application.properties 或 application.yml 文件。

    spring.data.neo4j.uri=bolt://host.docker.internal:7687

    Spring Boot 的 Neo4j 支持文档在这里。

    https://docs.spring.io/spring-boot/docs/2.1.2.RELEASE/reference/htmlsingle/#boot-features-neo4j

    【讨论】:

    • 如何“将 Spring Boot 配置中的 neo4j 主机更改为 host.docker.internal。”?谢谢!
    • 我已经更新了我的答案,包括对如何配置 neo4j 连接的说明。
    • 谢谢,这个链接很有帮助。我可能会向前一点点。首先它失败了,因为您必须在 uri (bolt://host.docker.internal:7687) 中指定协议。一旦完成,现在它在构建 Docker 映像期间失败,因为测试失败并显示“无法连接到主机”。我猜那是因为测试是作为本地机器测试运行的,而不是 docker 镜像?你能帮忙吗?
    • Hah -x 测试构建,现在我开始做生意了!谢谢!
    • 我后来发现 host.docker.internal 是操作系统特定的功能,这显然不是理想的。是否有更理想的解决方案,将 OSX 上的开发(它可以工作)移植到某些品种的 linux - 例如 Amazon EC2 - (它不能)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2013-10-05
    • 2021-05-27
    相关资源
    最近更新 更多