Docker 正在运行Chainlink节点-无法连接到数据库

Docker 正在运行Chainlink节点-无法连接到数据库,docker,blockchain,psql,Docker,Blockchain,Psql,在macOS上使用docker桌面 我正在尝试按照上的说明运行节点 数据库名称为node,与用户名node相同。用户可以访问数据库,并可以使用psql客户端登录 我在.env文件中尝试的连接字符串: postgresql://node@localhost/node postgresql://node:password@localhost/node postgresql://node:password@localhost:5432/node postgresql://node:password@1

在macOS上使用docker桌面

我正在尝试按照上的说明运行节点

数据库名称为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运行: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网络

将-network host添加到docker run命令,以便:

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

这解决了问题。

问题在于docker网络

将-network host添加到docker run命令,以便:

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

这就解决了这个问题。

这个问题可能是由于您的chainlink数据库已被独占锁锁定,并且在停止从未移除锁的节点之前

在这种情况下,您可以使用PgAdmin Ui或类似的方法查找所有锁,然后查找chainlink数据库上的独占锁,如果chainlink数据库上有多个独占锁,请记下其进程id


登录到您的pg客户端并运行SELECT pg_terminate_backend或SELECT pg_cancel_backend;在此处输入这些锁的PID(不带引号),同时在pg admin URL上保持刷新,以查看这些进程是否已停止(如果已停止),然后重新运行您的chainlink节点。

此问题可能是由于您的chainlink数据库已使用排他锁锁定,并且在停止从未移除锁的节点之前

在这种情况下,您可以使用PgAdmin Ui或类似的方法查找所有锁,然后查找chainlink数据库上的独占锁,如果chainlink数据库上有多个独占锁,请记下其进程id


登录到您的pg客户端并运行SELECT pg_terminate_backend或SELECT pg_cancel_backend;在此处输入这些锁的PID(不带引号),同时在pg admin URL上保持刷新,以查看这些进程是否已停止(如果已停止),然后重新运行链接节点。

您的标记中有docker-您是否在不同的docker容器中运行这些应用程序?如果是这样,问题是localhost引用docker容器-您需要链接应用程序容器和数据库容器,然后按名称引用数据库容器。您的标记中有docker-您是否在不同的docker容器中运行这些应用程序?如果是这样,问题是localhost引用docker容器-您需要链接应用程序容器和数据库容器,然后按名称引用数据库容器。这可能会解决问题,但也会打开容器网络到主机。更好的解决方案是只公开所需的端口,或者将应用程序容器链接到数据库容器。这不应该在生产环境中进行。这可能会解决问题,但也会向主机打开容器网络。更好的解决方案是只公开所需的端口,或者将应用程序容器链接到数据库容器。这不应该在生产中进行。