docker - 运行 Chainlink 节点 - 无法连接到数据库
问题描述
在 macOS 上使用 docker-desktop。
我正在尝试按照此页面上的说明运行节点。
数据库名称为node
,与用户名相同:node
。用户可以访问数据库并且可以使用psql
客户端登录。
我在 .env 文件中尝试过的连接字符串:
postgresql://node@localhost/node
postgresql://node:password@localhost/node
postgresql://node:password@localhost:5432/node
postgresql://node:password@127.0.0.1:5432/node
postgresql://node:password@127.0.0.1/node
当我在 macOS 上使用 docker-desktop 运行start 命令时cd ~/.chainlink-kovan && docker run -p 6688:6688 -v ~/.chainlink-kovan:/chainlink -it --env-file=.env smartcontract/chainlink local n
,我得到以下堆栈跟踪:
2020-09-15T14:24:41Z [INFO] Starting Chainlink Node 0.8.15 at commit a904730bd62c7174b80a2c4ccf885de3e78e3971 cmd/local_client.go:50
2020-09-15T14:24:41Z [INFO] SGX enclave *NOT* loaded cmd/enclave.go:11
2020-09-15T14:24:41Z [INFO] This version of chainlink was not built with support for SGX tasks cmd/enclave.go:12
2020-09-15T14:24:41Z [INFO] Locking postgres for exclusive access with 500ms timeout orm/orm.go:69
2020-09-15T14:24:41Z [ERROR] unable to lock ORM: dial tcp 127.0.0.1:5432: connect: connection refused logger/default.go:139 stacktrace=github.com/smartcontractkit/chainlink/core/logger.Error
/chainlink/core/logger/default.go:117
...
有谁知道我该如何解决这个问题?
解决方案
该问题可能是由于您的 chainlink 数据库已Exclusive Lock
在停止节点之前被锁定,而该节点的锁定从未被移除。
在这种情况下你所做的(对我有用)是使用 PgAdmin Ui 或类似的方式来查找所有锁,然后找到链链接数据库中持有的独占锁并记下它的进程 ID(如果那里有多个独占锁)在chainlink DB上)
登录到您的 pg 客户端并运行SELECT pg_terminate_backend(<pid>)
或SELECT pg_cancel_backend(<pid>);
在此处输入这些锁的 PID(不带引号),同时在 pg 管理 URL 上保持刷新以查看这些进程是否已停止如果停止,则重新运行您的 chainlink 节点。
推荐阅读
- python - 从 Txt 文件 python 中提取特定数据
- r - 如果我要导入 excel 文件,如何使用 flexdashboard?
- html - 我想将社交媒体详细信息并排对齐(按列而不是按行排列)。现在它是一个在另一个之下
- java - 如何计算java中的唯一值
- javascript - 将带有动态数据的地图添加到 Google 协作平台
- css - 打开或引用页面时如何禁用动画
- python - 如何定义参数数据类型以限制 Python 中的其他数据输入
- c++ - 您是否应该在头文件中对 IAsyncAction/IAsyncOperation 协程(函数)进行原型设计?
- javascript - 我无法弹出文件对话框
- reactjs - 在前端进行身份验证是用户是否登录