gpt4 book ai didi

macos - "Connection closed"从 Mac 上 Docker 中的 node.js 访问 Docker 中的 neo4j

转载 作者:行者123 更新时间:2023-12-05 05:56:30 27 4
gpt4 key购买 nike

我在 Docker 容器中运行一个 neo4j 数据库和一个 node.js api。在启动时,api 尝试将大量数据导入 neo4j,通过 neo4-driver 访问它。我还可以从 Docker 容器内部或外部(本地)手动运行这些导入。

这曾经工作得很好。它在 Windows 上运行良好,对于其他使用 Macbook 的人也运行良好,有时它也适用于我,但随后连接神秘地断开,我只收到 ECONNREFUSED 错误不再,直到我重新启动容器。 neo4j 和 Docker 都没有给出任何错误的迹象。日志中没有任何内容,它们似乎没有崩溃,只是无法访问。端口 7474 上的 neo4j 浏览器界面也不见了,尽管它曾经在那里。

这有时会奏效的事实是令人困惑的部分。但在我再次收到错误之前,它永远不会工作很长时间。当它下降时,我经常(不总是)首先得到一个 EPIPE 错误。

我之前跑的是Docker/docker desktop 3.1和10.20.2,现在升级到3.6.0和10.20.8。 Neo4j 版本 3。该 API 在 Alpine 上运行。

我使用 docker-compose -p 7687:7687 -f ./docker-compose.yml up 启动 Docker,我的 docker-compose.yml 文件如下所示:

version: '3'

services:
neo4j:
build:
context: ./db/
ports:
- "7474:7474"
- "7687:7687"

api:
build:
context: ./api/
volumes:
- ./api/:/code/
depends_on:
- neo4j
ports:
- "3000:3000"

我执行对 neo4j 的查询:

const session = driver.session();
session.writeTransaction((tx) => tx.run(query, params))

driver 之前用

初始化
const driver = neo4j.driver(neo4jUrl, neo4j.auth.basic(user, passwd), {});

最常见的错误是:

Neo4jError: connect ECONNREFUSED 172.20.0.2:7687

at captureStacktrace (/code/node_modules/neo4j-driver/lib/v1/result.js:199:15)
at new Result (/code/node_modules/neo4j-driver/lib/v1/result.js:65:19)
at _newRunResult (/code/node_modules/neo4j-driver/lib/v1/transaction.js:354:10)
at Object.run (/code/node_modules/neo4j-driver/lib/v1/transaction.js:238:14)
at Transaction.run (/code/node_modules/neo4j-driver/lib/v1/transaction.js:104:26)
...
at TransactionExecutor._safeExecuteTransactionWork (/code/node_modules/neo4j-driver/lib/v1/internal/transaction-executor.js:134:22)
at TransactionExecutor._executeTransactionInsidePromise (/code/node_modules/neo4j-driver/lib/v1/internal/transaction-executor.js:122:32)
at Timeout._onTimeout (/code/node_modules/neo4j-driver/lib/v1/internal/transaction-executor.js:98:18)
at listOnTimeout (internal/timers.js:557:17) {
code: 'ServiceUnavailable'

我怀疑这可能与 Windows 和 Mac 之间的 Docker 差异有关,但我不确定。它也适用于其他 Mac 用户,偶尔也适用于我,只是时间不长。那么什么会导致此连接突然中断?

最佳答案

这个问题似乎与您的环境有关,而不是与容器有关。

你能检查一下吗:

  • 可用的计算机资源:RAM 和 CPU

    You can limit CPU/RAM usage of a container with docker-compose --compatibility

    https://docs.docker.com/compose/compose-file/compose-file-v3/#deploy

    services:
    app:
    ...
    deploy:
    resources:
    limits:
    memory: 2g
    cpus: '1.4'
  • 操作系统版本:容器与您的操作系统共享内核,旧内核(或全新)可能会对您的容器产生影响。

  • Docker 版本:此进程运行您的容器,但是您已经升级了它。

  • 网络:我遇到过我的容器使用的 IP 与现有 IP 冲突的问题,您可以为您的容器强制使用一个 IP。

    https://docs.docker.com/compose/compose-file/compose-file-v3/#ipam

    services:
    app:
    networks:
    - backend

    networks:
    backend:
    ipam:
    driver: default
    config:
    - subnet: "10.8.0.0/24"

编辑 1

EPIPE 错误实际上可能是主要问题。

您可以尝试增加 docker desktop 中的资源限制吗?

Docker 桌面 -> 设置 -> 资源 -> 高级

编辑 2

您无法从您的主机中找到 neo4j 主机名是正常的。

  • Neo4j 在容器内运行
  • neo4j hostname 是一种 docker 机制,适用于同一 docker 网络中的其他容器。
  • 在 docker 外部,尝试连接到 localhost127.0.0.1
  • 关于您的撰写文件,端口已经公开。

关于macos - "Connection closed"从 Mac 上 Docker 中的 node.js 访问 Docker 中的 neo4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69163777/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com