使用Podman Compose部署后无法连接PostgreSQL的问题求助
解决Podman Compose下PostgreSQL连接问题
问题1:Flask应用无法解析db主机名
报错提示could not translate host name "db" to address: Temporary failure in name resolution,核心原因是两个容器未处于同一Podman网络,或网络DNS解析异常。
解决步骤:
- 先检查容器所属网络:
执行podman inspect flask-podman_db_1 | grep Networks和podman inspect flask-podman_web_1 | grep Networks,确认两个容器的网络名称一致(默认应为flask-podman_default)。 - 若网络不一致,修改
docker-compose.yml显式指定共享网络:
在配置末尾添加网络定义,并给两个服务绑定该网络:
随后执行services: web: # 原有配置保留 networks: - app-network db: # 原有配置保留 networks: - app-network networks: app-network: driver: bridgepodman-compose down,再podman-compose up -d重启服务。 - 验证:进入web容器执行
ping db,能ping通则域名解析正常。
额外补充:即便网络正常,也可能出现数据库未就绪就发起连接的情况,可在Flask应用的SQLAlchemy引擎配置中添加重试逻辑:
engine = create_engine(DATABASE_URL, pool_pre_ping=True)
问题2:本地主机无法用psql连接容器内PostgreSQL
本地执行psql -U postgres时,默认会尝试连接本地Unix域套接字,但容器内的PostgreSQL套接字不在主机文件系统中,需指定连接的主机和端口:
执行以下命令连接:
psql -U postgres -h localhost -p 5432
输入密码1234即可登录。若需直接指定密码,可使用:
PGPASSWORD=1234 psql -U postgres -h localhost -p 5432
内容的提问来源于stack exchange,提问作者Donbeo
相关产品推荐
相关产品推荐

