Docker + MySQL доступ к миру
У Меня есть 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`а ранее не устанавливалась ни одна БД, так как ОС чистая. Что может быть не так?