解决SQLAlchemy连接Docker-Compose PostgreSQL的主机名解析错误
解决容器外连接Docker Compose PostgreSQL服务的主机名解析问题
问题原因
Docker Compose创建的内部网络里,服务名(比如datawarehouse)只能被同网络下的其他容器识别解析,但宿主机(容器外环境)的DNS系统没这个服务名的映射,所以会出现无法解析主机名的错误。
解决办法
方法一:用localhost替换服务名(最简便)
- 先确认你的docker-compose.yml中PostgreSQL服务配置了端口映射,比如:
services: datawarehouse: image: postgres ports: - "5432:5432" # 容器5432端口映射到宿主机5432端口 environment: POSTGRES_USER: test POSTGRES_PASSWORD: test POSTGRES_DB: test - 修改连接字符串为:
postgresql://test:test@localhost/test
- 先确认你的docker-compose.yml中PostgreSQL服务配置了端口映射,比如:
方法二:在宿主机hosts文件添加映射
- 获取PostgreSQL容器的IP地址:
docker inspect datawarehouse | grep "IPAddress" - 编辑宿主机hosts文件:
- Linux/macOS:编辑
/etc/hosts,添加一行(替换[容器IP]为实际获取到的IP):[容器IP] datawarehouse - Windows:打开
C:\Windows\System32\drivers\etc\hosts(需管理员权限),添加同样内容
- Linux/macOS:编辑
- 完成后,原连接字符串
postgresql://test:test@datawarehouse/test即可正常使用
- 获取PostgreSQL容器的IP地址:
验证代码示例
from sqlalchemy import create_engine # 用方法一的连接字符串示例 engine = create_engine('postgresql://test:test@localhost/test') try: with engine.connect() as conn: print("数据库连接成功!") except Exception as e: print(f"连接失败:{str(e)}")
内容的提问来源于stack exchange,提问作者Mitchell
相关产品推荐
相关产品推荐

