首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“连接关闭”从Mac上的node.js访问码头的node.js

“连接关闭”从Mac上的node.js访问码头的node.js
EN

Stack Overflow用户
提问于 2021-09-13 13:43:54
回答 1查看 197关注 0票数 3

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

这个曾经很好用。它在Windows上运行得很好,对于使用Macbook的其他人也很好,有时它也适用于我,但后来连接神秘地下降,我只得到ECONNREFUSED错误,直到我重新启动容器。neo4j和Docker都没有给出任何错误的指示。日志里什么都没有,他们似乎没有崩溃,只是无法接近。端口7474上的neo4j浏览器接口也不见了,尽管它曾经存在过。

事实上,这有时是令人费解的部分。但在我再次犯错误之前,它永远不会起作用。当它下降时,我通常(并不总是)首先得到一个EPIPE错误。

我曾经运行Docker/docker桌面3.1和10.20.2,现在升级到3.6.0和10.20.8。Neo4j版本3. api运行在阿尔卑斯山上。

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

代码语言:javascript
复制
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的查询:

代码语言:javascript
复制
const session = driver.session();
session.writeTransaction((tx) => tx.run(query, params))

以前初始化driver的地方

代码语言:javascript
复制
const driver = neo4j.driver(neo4jUrl, neo4j.auth.basic(user, passwd), {});

最常见的错误是:

代码语言:javascript
复制
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用户也很好,偶尔也会为我工作,只是时间不长。那么是什么原因导致这种联系突然下降呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-23 07:36:17

与容器相比,此问题似乎更多地与您的环境有关。

你能检查一下:

  • 计算机资源: RAM和CPU

您可以限制带有坞组合--compatibility的容器的CPU/RAM使用。

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

服务: app:部署:资源:限制:内存: 2g cpus:'1.4‘

  • OS版本:容器与操作系统共享内核,旧内核(或全新内核)可能会对容器产生影响。

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

  • 网络:我的容器所使用的IP与现有的ip冲突,您可以强制您的容器使用ip。

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

服务:应用程序:网络:-后端网络: ipam:驱动程序:默认配置:-子网:"10.8.0.0/24"

编辑1

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

您能否尝试增加停靠桌面中的资源限制?

Docker Desktop -> Settings -> Resources -> Advanced

编辑2

通常,您无法从主机中找到neo4j主机名。

运行在container

  • neo4j主机名内的
  • Neo4j是一种码头机制,用于同一码头network.
  • outside码头中的其他容器,尝试连接到localhost127.0.0.1
  • regarding您的撰写文件,端口已经公开。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69163777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档