运行 一个 Chainlink 节点 - 无法连接到数据库
Running a Chainlink Node - Can't connect to database
在 macOS 上使用 docker-桌面。
我正在按照 this page 上的说明尝试 运行 一个节点。
数据库名称为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
当我 运行 start command: cd ~/.chainlink-kovan && docker run -p 6688:6688 -v ~/.chainlink-kovan:/chainlink -it --env-file=.env smartcontract/chainlink local n
,在 macOS 上使用 docker-desktop 时,我得到以下堆栈跟踪:
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
...
有谁知道我该如何解决这个问题?
问题出在 docker 网络上。
将--network host
添加到docker 运行命令中,使其为:
cd ~/.chainlink-kovan && docker run -p 6688:6688 -v ~/.chainlink-kovan:/chainlink -it --env-file=.env smartcontract/chainlink --network host local n
这解决了问题。
问题可能是由于您的 chainlink 数据库已被 Exclusive Lock
锁定,并且在停止节点之前锁从未被移除。
你在这种情况下所做的(对我有用的)是使用 PgAdmin Ui 或类似的方法来找到所有的锁,然后找到在 chainlink 数据库上持有的独占锁并记下它的过程id 或 ids(如果 chainlink DB 上有多个独占锁)
登录到您的 pg 客户端并 运行 SELECT pg_terminate_backend(<pid>)
或 SELECT pg_cancel_backend(<pid>);
在此处输入这些锁的 PID(不带引号),同时继续刷新 pg admin URL 以查看如果这些进程停止如果停止然后重新运行你的chainlink节点。
在 macOS 上使用 docker-桌面。
我正在按照 this page 上的说明尝试 运行 一个节点。
数据库名称为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
当我 运行 start command: cd ~/.chainlink-kovan && docker run -p 6688:6688 -v ~/.chainlink-kovan:/chainlink -it --env-file=.env smartcontract/chainlink local n
,在 macOS 上使用 docker-desktop 时,我得到以下堆栈跟踪:
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
...
有谁知道我该如何解决这个问题?
问题出在 docker 网络上。
将--network host
添加到docker 运行命令中,使其为:
cd ~/.chainlink-kovan && docker run -p 6688:6688 -v ~/.chainlink-kovan:/chainlink -it --env-file=.env smartcontract/chainlink --network host local n
这解决了问题。
问题可能是由于您的 chainlink 数据库已被 Exclusive Lock
锁定,并且在停止节点之前锁从未被移除。
你在这种情况下所做的(对我有用的)是使用 PgAdmin Ui 或类似的方法来找到所有的锁,然后找到在 chainlink 数据库上持有的独占锁并记下它的过程id 或 ids(如果 chainlink DB 上有多个独占锁)
登录到您的 pg 客户端并 运行 SELECT pg_terminate_backend(<pid>)
或 SELECT pg_cancel_backend(<pid>);
在此处输入这些锁的 PID(不带引号),同时继续刷新 pg admin URL 以查看如果这些进程停止如果停止然后重新运行你的chainlink节点。