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

Docker部署FastAPI应用pytest测试:数据库主机名解析失败求助

解决本地pytest无法解析Docker Compose数据库服务名的问题

方案1:通过环境变量切换测试用数据库地址

本地主机无法识别Docker网络内的服务名my_database,但你的PostgreSQL容器已将5432端口映射到本地主机,可直接指向localhost实现连接:

  • 修改database.py,通过环境变量动态读取数据库地址,避免硬编码:
    import os
    # 默认使用Docker网络内的服务名,测试时通过环境变量覆盖
    DATABASE_URL = os.getenv(
        "DATABASE_URL",
        "postgresql://myuser:password@my_database/dbf"
    )
    
  • 运行测试时,临时设置环境变量指向本地映射的数据库:
    DATABASE_URL=postgresql://myuser:password@localhost:5432/dbf python -m pytest
    

方案2:在Docker容器内运行pytest

应用容器与数据库容器处于同一Docker网络,能正常解析my_database,直接在容器内执行测试更贴合生产环境:

  • 确保Docker Compose服务处于运行状态:
    docker-compose up -d
    
  • 进入应用容器的终端:
    docker-compose exec app bash
    
  • 在容器内执行pytest命令:
    python -m pytest
    

方案3:修改本地hosts文件(可选)

通过修改本地hosts,把my_database映射到本地回环地址,让本地系统能解析这个服务名:

  • 编辑hosts文件:
    • Linux/macOS:sudo nano /etc/hosts
    • Windows:以管理员身份编辑C:\Windows\System32\drivers\etc\hosts
  • 添加如下一行:
    127.0.0.1 my_database
    
  • 保存后,本地就能直接用my_database作为主机名连接数据库,无需修改代码或环境变量。不过这种方式依赖Docker端口映射,若容器端口变动需同步调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:06:22