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

Python连接Azure容器应用(ACA)中PostgreSQL数据库的连接问题求助

Python连接Azure容器应用(ACA)中PostgreSQL数据库的连接问题求助

我来帮你排查这个连接失败的问题,咱们一步步梳理错误点和修正方案:

首先看最明显的错误:主机地址格式不对

你在Python代码里用了带https://的完整URL作为PostgreSQL的主机地址,但PostgreSQL是基于TCP协议的数据库服务,根本不需要HTTP/HTTPS协议前缀。psycopg2会把整个https://xxx...字符串当作主机名去解析,这肯定找不到对应的服务器地址,所以才会报“无法翻译主机名”的错误。

其次,你的ACA Ingress配置不匹配TCP服务

PostgreSQL是TCP协议的服务,但你当前的ACA部署yaml里,Ingress默认使用的是HTTP协议,这样Ingress无法正确转发PostgreSQL需要的TCP流量,哪怕你把targetPort设为5432也没用。

具体修正步骤:

  1. 调整ACA的Ingress配置,启用TCP传输
    修改你的部署yaml里的ingress部分,添加transport: tcp配置,指定外部端口(可以手动指定5432,或者让ACA自动分配,之后需要确认实际的外部端口):

    properties:
      workloadProfileName: D16
      configuration:
        activeRevisionsMode: Single
        ingress:
          external: true
          targetPort: 5432
          transport: tcp  # 新增这一行,指定TCP协议
          externalPort: 5432  # 可选:指定外部访问端口,若不填ACA会自动分配一个端口
      # 其他配置保持不变...
    

    部署更新后的配置后,记得在Azure Portal里确认ACA的外部访问端口和地址。

  2. 修正Python的连接字符串
    去掉主机地址里的https://前缀,加上正确的端口(就是上面配置的externalPort,或者ACA自动分配的端口):

    import psycopg2
    
    # 只保留主机名,去掉https://
    db_host = "my-app.funnyname-1234567.germanywestcentral.azurecontainerapps.io"
    # 加上端口参数,确保和Ingress配置的externalPort一致
    conn = psycopg2.connect(
        host=db_host,
        port=5432,  # 这里填实际的外部端口
        dbname="postgres",
        user="postgres",
        password="postgres"
    )
    

    用关键字参数的方式写连接字符串会比字符串拼接更清晰,也不容易出错。

  3. 额外检查项

    • 确认你的本地机器IP在ACA的网络访问允许列表里(如果ACA配置了IP限制的话)
    • 检查PostgreSQL容器内的postgresql.conf,确认listen_addresses设置为*(确保数据库监听所有网卡,而不是只监听localhost),不过你能在容器内部用psql连接,大概率已经设置好了。

备注:内容来源于stack exchange,提问作者kanimbla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:43:08