Docker Compose下Flask容器无法连接Solr报连接被拒问题
问题原因
Docker容器里的localhost/127.0.0.1只代表容器自身,既不指向宿主机,也不指向同环境部署的其他容器。
你在Flask容器里访问localhost:8983,相当于请求Flask容器自己的8983端口,Flask容器内根本没有运行Solr服务,必然返回连接拒绝。
配置中Solr的8983端口映射到宿主机的规则,仅对宿主机本身生效,容器之间的内网通信不会走这个端口映射逻辑。
修复方法
- 修改Flask应用内的Solr连接地址:把所有写死的
http://localhost:8983/solr替换为http://solr:8983/solr。Docker Compose部署的同组服务默认自动完成内网域名解析,直接使用服务名solr作为主机名即可定位到Solr容器,端口直接使用Solr容器内部的服务端口8983即可。你在flask配置段写的links: - solr属于旧版Compose的冗余配置,新版Compose下同文件定义的所有服务默认加入同一个内网,无需额外配置links即可通过服务名互访。 - 重启服务后验证连通性:执行以下命令进入Flask容器测试访问:
docker exec -it flask wget -S http://solr:8983/solr/ee1_1/select
命令正常返回Solr响应即代表连通正常。
排查补充
- 如果你是在宿主机上执行
wget http://localhost:8983/solr/CORE_NAME/select仍然报连接拒绝,说明Solr服务本身未正常启动,直接执行docker logs solr查看Solr容器日志排查启动故障即可。 - 你的Solr启动配置中预创建的核心名为
ee1_1和ee1_2,测试访问时不要使用CORE_NAME占位符,需要替换为实际存在的核心名,否则会返回404错误。
内容的提问来源于stack exchange,提问作者H B
相关产品推荐
相关产品推荐

