Docker + MySQL доступ к миру

Рейтинг: 2Ответов: 1Опубликовано: 28.04.2023

У Меня есть Docker, на нём установлена MySQL + MariaDB, docker-compose.yml настроен с режимом

network_mode: host

То есть все порты открыты. При сканировании портов при помощи MobaXTern находятся все порты от NGinx и других сервисов внутри Docker и даже из браузера другого ПК в Lan - сети можно войти по IP хост-машины по порту 80, и всё отлично, но порт "глобально" 3306 не открыт. Внутри докера выполнил данную команду и обнаружил, что MySQL слушает его только локально: команда:

ss -lptn 'sport = :3306'

Вывод:

LISTEN 0 869 0.0.0.0:3306 0.0.0.0:* users:(("mysqld",pid=703,fd=91))

То есть прослушивание есть, но только внутри контейнера, снаружи он не обнаруживается. В докере не установлены ни iptables, ни ufw, так что блокировать что-то изнутри - вряд ли возможно. Конфигурации сервисов БД следующие: Файл /etc/mysql/my.cnf:

[mysqld]
port = 3306
bind-address = 0.0.0.0
user = root
datadir = /var/lib/mysql
pid-file = /var/lib/mysql/mysql.pid
#skip_networking=0

Файл /etc/mysql/mariadb.conf.d/50-server.cnf:

user = root
pid-file = /run/mysqld/mysqld.pid
socket = /run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
#skip-external-locking

Вот правила iptables -L из хост-машины:

Chain INPUT (policy ACCEPT)
target  prot opt source  destination
Chain FORWARD (policy DROP)
target  prot opt source  destination
Chain OUTPUT (policy ACCEPT)
target  prot opt source  destination
Chain DOCKER (0 references)
target  prot opt source  destination
Chain DOCKER-ISOLATION-STAGE-1 (0 references)
target  prot opt source  destination
Chain DOCKER-ISOLATION-STAGE-2 (0 references)
target  prot opt source  destination
Chain DOCKER-USER (0 references)
target  prot opt source  destination
ACCEPT  tcp  --  anywhere  anywhere  tcp dpt:mysql

Ради интереса решил повторить команду ss -lptn 'sport = :3306 на хост машине и получил интересненький результат:

LISTEN 0 869 0.0.0.0:3306 0.0.0.0:* users:(("mysqld",pid=917103,fd=91))

Это всё развёрнуто на ОС Ubuntu-Server 20.04, вне Docker`а ранее не устанавливалась ни одна БД, так как ОС чистая. Что может быть не так?

Ответы

▲ 0Принят

Итак, ребят, для тех кто ищет ответ, скажу заранее - каждый способ уникальный и суть состоит в том, чтобы принудительно изнутри контейнера данный порт пробросить, способ с "редактированием файлом my.conf" и подобное - Вам ВОЗМОЖНО не поможет.