Docker化Python容器无法连接Docker部署的PostgreSQL数据库
解决Docker环境中Python连接PostgreSQL的两个问题
问题1:无法解析主机名"postgres"
原因:Python容器与PostgreSQL服务不在同一个Docker网络中,Docker的服务名解析仅在同网络内生效。
解决方法:
- 方法一(推荐):在
docker-compose.yml中把Python服务加入postgres网络,示例配置:python-app: build: . networks: - postgres # 和PostgreSQL服务使用同一网络 - 方法二:手动运行Python容器时指定网络:
docker run --network postgres your-python-image
问题2:finally块中connection变量未定义的NameError
原因:当数据库连接代码抛出异常(比如主机解析失败),connection变量还未被赋值就进入finally块,触发未定义错误。
解决方法:提前初始化connection为None,在finally块中判断变量存在后再执行关闭操作,示例代码:
import psycopg2 connection = None # 提前初始化变量 try: connection = psycopg2.connect( host="postgres", database="your-db-name", user="your-db-user", password="your-db-password" ) # 执行数据库操作逻辑 except psycopg2.Error as e: print(f"数据库连接出错: {e}") finally: if connection is not None: connection.close() print("数据库连接已关闭")
内容的提问来源于stack exchange,提问作者Kefest1
相关产品推荐
相关产品推荐

