使用Docker-compose部署Discord机器人连接Lavalink出现ClientConnectorError如何解决
问题根因
- Docker 容器的
127.0.0.1指向的是容器自身的网络栈,而非宿主机或同网络下的其他容器,所以bot容器内访问127.0.0.1:2333根本找不到Lavalink服务 - Docker Compose会为同一项目下的所有服务自动创建专属私有网络,同网络下的服务可以直接用服务名作为域名互相访问,无需依赖端口映射到宿主机
- 你当前的
depends_on仅判断Lavalink容器是否启动,无法判断Lavalink进程是否完成初始化、端口是否正常监听,过早发起连接也会触发报错
修复步骤
1. 修改bot连接地址
把music.py中Lavalink连接地址从127.0.0.1替换为Lavalink的服务名lavalink:
await self.client.wavelink.initiate_node(host='lavalink', port=2333, rest_uri='http://lavalink:2333', password="pass", identifier='MAIN', region='us_central')
2. 优化docker-compose配置
给Lavalink添加健康检查,确保bot仅在Lavalink服务正常运行后再启动,端口映射可根据自身需求保留或删除(容器内部互访不需要端口映射):
version: "3.9" services: bot: build: context: . dockerfile: Dockerfile restart: on-failure depends_on: lavalink: condition: service_healthy lavalink: container_name: lavalink image: fredboat/lavalink:master volumes: - ./Lavalink/application.yml:/opt/Lavalink/application.yml # 仅需宿主机访问Lavalink时保留以下端口配置,否则可删除 # ports: # - "2333:2333" restart: always healthcheck: test: "wget --no-verbose --tries=1 --spider http://localhost:2333/version || exit 1" interval: 5s timeout: 10s retries: 5
3. 验证Lavalink配置
确认你的application.yml中以下配置正确:
- 监听地址为
0.0.0.0(允许容器外部访问) - 监听端口为
2333 - 验证密码为
pass
内容的提问来源于stack exchange,提问作者Holy Tanukis
相关产品推荐
相关产品推荐

