【问题标题】:Running a Chainlink Node - Can't connect to database运行 Chainlink 节点 - 无法连接到数据库
【发布时间】:2020-09-15 14:37:34
【问题描述】:

在 macOS 上使用 docker-desktop。

我正在尝试按照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

当我在 macOS 上使用 docker-desktop 运行 start command: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
...

有谁知道我该如何解决这个问题?

【问题讨论】:

  • 您的标签中有docker - 您是否在不同的 docker 容器中运行这些应用程序?如果是这样,问题是localhost指的是docker容器——你需要链接app容器和数据库容器,然后通过名称引用数据库容器。

标签: docker blockchain psql


【解决方案1】:

这个问题可能是由于你的chainlink数据库已经被Exclusive Lock锁定并且在停止节点之前锁定从未被移除。

在这种情况下你所做的(对我有用的)是使用 PgAdmin Ui 或类似的方式来查找所有锁,然后找到链链接数据库中持有的独占锁并记下它的进程 ID 或 ID(如果有多个chainlink DB 上有独占锁)

登录到您的 pg 客户端并运行 SELECT pg_terminate_backend(<pid>)SELECT pg_cancel_backend(<pid>); 在此处输入这些锁的 PID(不带引号),同时不断刷新 pg 管理 URL 以查看这些进程是否已停止。如果停止,则重新运行您的 chainlink 节点。

【讨论】:

    【解决方案2】:

    问题在于 docker 网络。

    在 docker run 命令中添加--network host,使其为:

    cd ~/.chainlink-kovan && docker run -p 6688:6688 -v ~/.chainlink-kovan:/chainlink -it --env-file=.env smartcontract/chainlink --network host local n
    

    这解决了问题。

    【讨论】:

    • 这可能会解决问题,但它也会向主机打开容器网络。更好的解决方案是仅公开您需要的端口或将应用程序容器链接到数据库容器。这应该在生产中完成。
    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多