You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chainlink Docker容器无法连接PostgreSQL Docker容器的问题求助

核心问题

你的两个Docker容器不在同一个自定义Docker网络中,导致Chainlink容器无法通过主机名解析到PostgreSQL容器;同时DATABASE_URL存在两处错误:主机名与PostgreSQL容器名不匹配、误将容器名当作数据库用户名。

分步解决

1. 创建自定义Docker网络

自定义网络默认支持容器名的DNS解析,比默认bridge网络的解析更稳定:

docker network create chainlink-net

2. 重新启动PostgreSQL容器并加入网络

先清理旧容器(如果仍在运行),再启动带指定网络的新容器:

# 停止并删除旧容器
docker stop some-postgres
docker rm some-postgres

# 启动绑定自定义网络的PostgreSQL容器
docker run --name some-postgres --network chainlink-net -e POSTGRES_PASSWORD=secret -p 5432:5432 -d postgres

3. 修正.env文件的DATABASE_URL

PostgreSQL默认用户名是postgres,不是容器名;主机名要和容器名some-postgres一致:

ROOT=/chainlink
LOG_LEVEL=debug
ETH_CHAIN_ID=5
CHAINLINK_TLS_PORT=0
SECURE_COOKIES=false
ALLOW_ORIGINS=*
ETH_URL=wss://eth-goerli.g.alchemy.com/v2/<API KEY>
# 修正用户名和主机名
DATABASE_URL=postgresql://postgres:secret@some-postgres:5432/postgres?sslmode=disable

4. 启动Chainlink容器时加入同一个网络

启动Chainlink容器时指定加入chainlink-net网络,确保容器间能通过名称互通:

# 示例启动命令(根据实际挂载需求调整)
docker run --name chainlink --network chainlink-net -p 6688:6688 -v $(pwd)/.env:/chainlink/.env -v $(pwd)/api:/chainlink/api -v $(pwd)/data:/chainlink/data -d smartcontract/chainlink:latest local n

错误原因说明

  • 默认bridge网络的DNS解析依赖Docker内部服务,稳定性不如自定义网络,容器间通过名称访问容易出问题。
  • 混淆了Docker容器名(some-postgres)和PostgreSQL内部用户名(默认是postgres),导致数据库身份验证逻辑错误。
  • DATABASE_URL中主机名写为postgres,但实际容器名是some-postgres,无法匹配解析。

内容的提问来源于stack exchange,提问作者yk28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:55:20