Docker容器中Trino与PostgreSQL通过JDBC连接器配置问题
解决Docker容器中Trino与PostgreSQL的连接问题
1. 让两个容器处于同一Docker网络
默认Docker的bridge网络不支持容器名直接解析,必须把Trino和PostgreSQL放到同一个自定义网络里,才能用容器名my-postgres-db通信:
- 创建自定义网络:
docker network create trino-postgres-net
- 重启PostgreSQL容器并加入该网络:
docker stop my-postgres-db docker rm my-postgres-db docker run -d --name my-postgres-db --network trino-postgres-net -p 5432:5432 -v /home/postgresdb/db:/var/lib/postgresql/data my-postgres-image
- 重启Trino容器并加入同一网络:
docker stop trino docker rm trino docker run --name trino -d --network trino-postgres-net -p 8080:8080 -v $PWD/catalog:/etc/trino/catalog/ trinodb/trino
2. 修正postgresql.properties配置
- 必须把
<db-name>替换成PostgreSQL里真实存在的数据库名(比如默认的postgres,或者你自己创建的库),不能留占位符。 - 正确的配置示例:
connector.name=postgresql connection-url=jdbc:postgresql://my-postgres-db:5432/postgres connection-user=user_1 connection-password=password_1
补充:如果你的PostgreSQL容器里还没创建
user_1用户和对应数据库,先进入容器执行SQL创建:
docker exec -it my-postgres-db psql -U postgres # 执行以下SQL CREATE USER user_1 WITH PASSWORD 'password_1'; CREATE DATABASE postgres OWNER user_1; GRANT ALL PRIVILEGES ON DATABASE postgres TO user_1;
3. 验证配置与容器状态
- 检查Trino容器是否正确挂载了配置文件:
docker exec trino ls /etc/trino/catalog/
要确保能看到postgresql.properties文件。
- 查看Trino日志排查错误:
docker logs trino
如果出现连接超时、认证失败等信息,根据日志调整配置。
- 确认PostgreSQL容器正常运行:
docker ps | grep my-postgres-db
状态必须是Up,并且本地能正常连接:
psql -h localhost -p 5432 -U user_1 -d postgres
4. 验证Trino连接
重启Trino容器后,用Trino CLI查看目录:
docker run -it --network trino-postgres-net trinodb/trino --server trino:8080 # 在CLI里执行命令 SHOW CATALOGS;
此时应该能看到postgresql目录。
内容的提问来源于stack exchange,提问作者Cipher187
相关产品推荐
相关产品推荐

