LINUX.ORG.RU

Как пробросить порт с хоста внутрь docker контейнера?

 ,


0

2

Нужно изнутри докер контейнера подключаться к базе MySQL на другом сервере. При этом на хосте проброшен ssh туннель и база доступна на порту 3307.
Внутри контейнера MySQL сервер, содержащий базу с Federated таблицами, ссылающимися на удаленный сервер, но не работает, т.к. в контейнере свой 127.0.0.1 и к нему порт не проброшен. SSH в контейнере нет, поэтому просто взять и пробросить не выйдет. Нужно как-то 127.0.0.1:3307 с хоста пробросить в контейнер. Причем тоже на 127.0.0.1, т.к. на удаленном сервере bind-address=127.0.0.1 и менять нельзя.
Что можете подсказать? Весь инет излазил.

★★★★★

А зачем ты это всё делаешь? Какой будет профит? И что тебе мешает пробросить порт в контейнере? Что тебе мешает пробросить порт с помощью ssh?

Что можете подсказать?

Тебе надо гуглить по фразе «удаление гданд через анальное отверстие».

itn ★★★
()
Ответ на: комментарий от itn

Тебе надо гуглить по фразе «удаление гданд через анальное отверстие»

Эт я сам понимаю, но по-другому не придумывается.

Опишу подробнее:

Есть 2 сервера. К примеру, 1.1.1.1 и 2.2.2.2

на 1.1.1.1 продакшн сервер, в нем 2 базы, условно fastdata и userdata.
В первой данные, необходимые всем пользователям, обновляются чуть ли не ежесекундно. Во второй пользовательские данные - тоже часто обновляются, но не так.


На 2.2.2.2 тестовый сервер. Там куча всего. В т.ч. аж 2 MySQL сервера. Один на хосте, другой в контейнере. Итого:

1) Сервер на хосте, на стандартном порту 3306

2) Также проброшен порт с 1.1.1.1 - забиндено на 3307

3) База в контейнере (MariaDB 10.1.23 - как на проде), на хост выведено на порт 3308

Вот этот третий сервер должен быть копией базы на продакшене, но с другими пользователями (тестовыми). Т.е. база userdata там своя, а вот fastdata д.б. абсолютно идентична базе с прода в любой момент времени. Предположил решение через Federated таблицы, т.е. выглядит так:

ENGINE=FEDERATED DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci CONNECTION='mysql://root:password@127.0.0.1:3307/fastdata/table1';


Но не работает. Т.к. 127.0.0.1 в контейнере естественно свой и никакая продакшн база туда не забиндена. Подключиться к 172.17.0.3 внутри контейнера, на котором доступ к хосту нельзя, т.к. в базе на проде bind-address=127.0.0.1 и тупо откажет в подключении. Думал запускать контейнер с --net='host' - тогда он будет в одной сети с хостом, но тогда база контейнера будет на порту 3306, а он уже занят локальной базой, а как поменять порт внутри контейнера тоже не понял. Вот такая заковыка.


Qwentor ★★★★★
() автор топика
Ответ на: комментарий от Qwentor

Я тогда не понял, ты ищешь уже готовые решения? их нет читай доки по докеру.
Если я тебя верно понял то наверное тебе сюда.

itn ★★★
()
Ответ на: комментарий от itn

В общем решение оказалось простым:

docker run --name 10.1.23-mariadb --net=host -v /opt/test/mariadb:/var/lib/mysql -v /opt/test/mariacnf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=password -d mariadb:10.1.23


Т.е. как я и предполагал через --net=host - таким образом контейнер работает в сети хоста и нет нужды что-то редиректить. /etc/mysql действительно не пробрвсывается для изменения my.cnf, зато спокойно пробрасывается /etc/mysql/conf.d, а в нем файл mariadb.cnf, в котором и прописывается изменение порта на 3308.

Проблема решена

Qwentor ★★★★★
() автор топика
Последнее исправление: Qwentor (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.