我在码头容器中运行一个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文件如下所示:
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用户也很好,偶尔也会为我工作,只是时间不长。那么是什么原因导致这种联系突然下降呢?
发布于 2021-09-23 07:36:17
与容器相比,此问题似乎更多地与您的环境有关。
你能检查一下:
您可以限制带有坞组合--compatibility的容器的CPU/RAM使用。
https://docs.docker.com/compose/compose-file/compose-file-v3/#deploy
服务: app:部署:资源:限制:内存: 2g cpus:'1.4‘
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主机名内的localhost或127.0.0.1https://stackoverflow.com/questions/69163777
复制相似问题