#python #docker #docker-compose #discord #discord.py
Вопрос:
Я создаю бота Discord на python, и я получаю ошибку, когда мой бот пытается подключиться к lavalink. Я использую Docker-compose для бота и lavalink, а мой клиент lavalink-wavelink. Я проверил, что lavalink находится в нужном порту.
Кто-нибудь имеет хоть малейшее представление, в чем дело?
Мой docker-compose.yml
:
version: "3.9"
services:
bot:
build:
context: .
dockerfile: Dockerfile
restart: on-failure
depends_on:
lavalink:
condition: service_started
lavalink:
container_name: lavalink
image: fredboat/lavalink:master
volumes:
- ./Lavalink/application.yml:/opt/Lavalink/application.yml
ports:
- 2333
restart: always
Мой music.py
:
class Music(commands.Cog, wavelink.WavelinkMixin, name="music"):
def __init__(self, client):
self.client = client
self.fancy_name = "Music"
if not hasattr(client, 'wavelink'):
self.client.wavelink = wavelink.Client(bot=self.client)
self.client.loop.create_task(self.start_nodes())
async def start_nodes(self):
await self.client.wait_until_ready()
await self.client.wavelink.initiate_node(host='127.0.0.1',
port=2333,
rest_uri='http://127.0.0.1:2333',
password="pass",
identifier='MAIN',
region='us_central')
И моя ошибка:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/wavelink/websocket.py", line 76, in _connect
self._websocket = await self._node.session.ws_connect(uri, headers=self.headers, heartbeat=self._node.heartbeat)
File "/usr/local/lib/python3.9/site-packages/aiohttp/client.py", line 721, in _ws_connect
resp = await self.request(method, url,
File "/usr/local/lib/python3.9/site-packages/aiohttp/client.py", line 480, in _request
conn = await self._connector.connect(
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 523, in connect
proto = await self._create_connection(req, traces, timeout)
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 858, in _create_connection
_, proto = await self._create_direct_connection(
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 1004, in _create_direct_connection
raise last_exc
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 980, in _create_direct_connection
transp, proto = await self._wrap_create_connection(
File "/usr/local/lib/python3.9/site-packages/aiohttp/connector.py", line 943, in _wrap_create_connection
raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 127.0.0.1:2333 ssl:default [Connect call failed ('127.0.0.1', 2333)]
Ответ №1:
Ваш бот-контейнер должен подключаться http://lavalink:2333
, а не сам по себе. 127.0.0.1
Ответ №2:
Ваше сопоставление неверно, вы объявили порт, но не сопоставили его с вашим локальным хост-портом. измените это
ports:
- 2333
Для
ports:
- "2333:2333"
это сопоставит порт из вашего контейнера docker, в котором работает lavalink, с вашим локальным портом 2333
хоста, или вы можете назначить любой порт, который хотите.
порты:
- «first_arg:second_arg» первый : порт локального хоста второй: порт контейнера докера
Комментарии:
1. Код выполняется в контейнере, а не на хосте. Поэтому сопоставления портов не имеют значения