WSL环境下Django无法通过主机名连接Docker PostgreSQL容器
解决WSL中Django无法连接Docker容器内PostgreSQL的问题
错误原因
WSL环境无法解析Docker容器名称postgres——容器名称仅能在Docker自身的内部网络(如默认的bridge网络)中被解析,而运行在WSL中的Django进程不在这个网络域内,因此出现域名解析失败的错误。
可行解决方案
方案1:使用Docker Desktop提供的特殊域名host.docker.internal
Docker Desktop为WSL环境提供了host.docker.internal这个特殊域名,它会自动指向Windows主机的IP,而你已经通过-p 5432:5432将容器的5432端口映射到了Windows主机,因此WSL可以通过这个域名访问容器。
修改你的DATABASE_URL配置:
DATABASE_URL=postgres://postgres:postgres@host.docker.internal:5432/postgres
方案2:使用localhost(WSL 2环境适用)
在WSL 2中,localhost已经默认映射到Windows主机的网络端口,因此直接替换host为localhost也能生效:
DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres
额外检查项
- 确认Docker Desktop已开启Enable the WSL 2 based engine(设置->General中)
- 确保Docker容器处于运行状态,可通过
docker ps命令验证
内容的提问来源于stack exchange,提问作者Zaman Kazimov
相关产品推荐
相关产品推荐

