172 похожих чатов

Всем привет! Подскажите, пожалуйста, ситуация следующая: требуется поднять через Docker Compose

связку игровых серверов.
Соответственно, конфигурация для одного из них, основного (прокси):
bungee-server:
container_name: server-bungee
build:
context: servers/bungee/
dockerfile: Dockerfile
ports:
- 25565:25565
- 8804:8804
restart: unless-stopped
volumes:
- ./servers/bungee:/bungee
depends_on:
- mysql

И всё работает, с игрового клиента по localhost сервер определяется.
Но есть проблема: сам сервер вместо клиентского IP адреса получает IP адрес контейнера (внутренней сети докера).
Т.е. в логах следующее:
19:09:14 [INFO] [/10.0.2.2:59123] <-> InitialHandler has pinged
А если я запускаю этот же сервер напрямую, без докера, в логах, как и положено:
01:54:04 [INFO] [/127.0.0.1:59984] <-> InitialHandler has pinged
И когда сервер будет работать на другом хосте - будет мой внешний IP, соответственно.

Читал документацию, экспериментировал с присвоением сетевого интерфейса хостовой машины (network_mode: host), смотрел репозитории соответствующих игровых проектов в докере на гите, но пробросить IP не получилось, идей пока больше нет.
Как решать подобную проблему в вебе - понятно, с проксированием через nginx, а как быть тут, когда запрос летит напрямую от игры к игровому серверу?

Буду благодарен за любые идеи и наводки.

3 ответов

19 просмотров

Ну стопэ, а что у тебя с net=host не получилось?

И тут самое время задаться вопросом «а как nginx решает проблему?» и вспомнить про OSI https://www.haproxy.com/blog/use-the-proxy-protocol-to-preserve-a-clients-ip-address/

BuTaMuH- Автор вопроса
Andrey
И тут самое время задаться вопросом «а как nginx р...

Спасибо за наводку, это похоже на то, что нужно, буду экспериментировать

Похожие вопросы

Обсуждают сегодня

#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Карта сайта