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
- Linux/macOS:
- 添加如下一行:
127.0.0.1 my_database - 保存后,本地就能直接用
my_database作为主机名连接数据库,无需修改代码或环境变量。不过这种方式依赖Docker端口映射,若容器端口变动需同步调整。
内容的提问来源于stack exchange,提问作者Serhei
相关产品推荐
相关产品推荐

