本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经验分享,旨在帮助读者更好地理解和应用这些领域的最新进展
使用docker compose启动Dify后,在其中配置本地中的xinference模型,报错:
get xinference model extra parameter failed, url: http://127.0.0.1:9997/v1/models/bge-m3, error: HTTPConnectionPool(host='127.0.0.1', port=9997): Max retries exceeded with url: /v1/models/bge-m3 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb3b25de7d0>: Failed to establish a new connection: [Errno 111] Connection refused'))
原因:
当一个应用在一个Docker容器内运行时,它试图连接到另一个同样运行在本地机器上的服务时,通常会使用127.0.0.1或localhost作为目标地址。然而,在Docker容器内部,127.0.0.1指的是容器自身的回环接口,而不是宿主机的回环接口。
因此,当在Docker容器内部的应用试图连接到宿主机上的服务时,需要一种方法来从容器内部正确地引用宿主机的IP地址。host.docker.internal是一个特殊的域名,它在Docker容器中解析为主机的IP地址,这使得容器可以与宿主机上的服务进行通信。
具体来说:
在Docker for Windows和Docker for Mac环境下,host.docker.internal会解析为宿主机的IP地址。 在Linux系统中,虽然没有专门的host.docker.internal域名,但如果使用的是Docker网络(比如桥接网络),通常可以通过172.17.0.1(或者/proc/net/route中的LOCAL行所指向的地址)来访问宿主机的网络接口。
修复步骤
1. 关闭防火墙
sudo ufw disable
# 防火墙在系统启动时自动禁用
sudo ufw status
# 状态:不活动
2. 本地服务监听所有接口
配置 如xinference 服务监听所有接口:如果 xinference 是在宿主机上运行的服务,并且默认只监听 localhost 或 127.0.0.1,你需要修改它的配置,使其监听所有可用的网络接口(通常是 0.0.0.0),以便可以从 Docker 容器内访问它。
xinference-local --host 0.0.0.0 --port 8193