Этот вопрос закрыт для ответов, так как повторяет вопрос Почему-то docker swarm не пропускает некоторые запросы?
@Ninzalo

Как сделать доступ по IP и PORT между контейнерами в Docker Swarm?

Здравствуйте, не так давно начал ознакомление с Докером.
Суть в том, что не могу связать эти 2 контейнера по ip и port'у. Локально все работает прекрасно (как и ожидалось), а вот с докером все не могу разобраться. В каждом из контейнеров все запускается на ip=127.0.0.1 и port=8888, но вот передать данные между ними не выходит. Что почитать/посмотреть, чтобы разобраться?
docker-swarm.yml
version: '3'
services:
  server:
    image: server:v0.0.1
    init: true
    command: sh -c "python server.py"
    networks:
      - example_frontend
  client:
    image: client:v0.0.1
    init: true
    command: sh -c "python3 client.py"
    networks:
      - example_frontend

networks:
  example_frontend:
    driver: overlay

Запускаю через
docker stack deploy -c docker-swarm.yml example-app

часть кода server.py
...
    async def main(self, local_ip: str, local_port: int) -> None:
        server = await asyncio.start_server(
            lambda reader, writer: self.handle_request(
                reader=reader, writer=writer
            ),
            local_ip,
            local_port,
        )
        addrs = ", ".join(str(sock.getsockname()) for sock in server.sockets)
        async with server:
            await server.serve_forever()

    def start_server(self, local_ip: str, local_port: int) -> None:
        asyncio.run(self.main(local_ip=local_ip, local_port=local_port))
...

часть кода client.py
...
async def send_to_server(
    message: MessageStruct, local_ip: str, local_port: int
) -> None:
    _, writer = await asyncio.open_connection(local_ip, local_port)
    writer.write(dataclass_to_bytes(message))
    await writer.drain()
    writer.write_eof()
    writer.close()
...

Traceback

2023-08-20 14:55:24 Traceback (most recent call last):
2023-08-20 14:55:24 await send_to_server(
2023-08-20 14:55:24 File "/usr/local/lib/python3.11/site-packages/pybotterfly/server/server_func.py", line 25, in send_to_server
2023-08-20 14:55:24 _, writer = await asyncio.open_connection(local_ip, local_port)
2023-08-20 14:55:24 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2023-08-20 14:55:24 File "/usr/local/lib/python3.11/asyncio/streams.py", line 48, in open_connection
2023-08-20 14:55:24 transport, _ = await loop.create_connection(
2023-08-20 14:55:24 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2023-08-20 14:55:24 File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1085, in create_connection
2023-08-20 14:55:24 raise exceptions[0]
2023-08-20 14:55:24 File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1069, in create_connection
2023-08-20 14:55:24 sock = await self._connect_sock(
2023-08-20 14:55:24 ^^^^^^^^^^^^^^^^^^^^^^^^^
2023-08-20 14:55:24 File "/usr/local/lib/python3.11/asyncio/base_events.py", line 973, in _connect_sock
2023-08-20 14:55:24 await self.sock_connect(sock, address)
2023-08-20 14:55:24 File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 634, in sock_connect
2023-08-20 14:55:24 return await fut
2023-08-20 14:55:24 ^^^^^^^^^
2023-08-20 14:55:24 File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 674, in _sock_connect_cb
2023-08-20 14:55:24 raise OSError(err, f'Connect call failed {address}')
2023-08-20 14:55:24 ConnectionRefusedError: [Errno 111] Connect call failed ('127.0.0.1', 8888)
  • Вопрос задан
  • 130 просмотров
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы