MySQL - Ограничение удаленных подключений к одному контейнеру Docker (в сети Docker) - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь развернуть веб-приложение Spring с помощью служб докеров, чтобы протестировать мой проект. Службы запускаются без проблем, но когда я пытаюсь подключиться к конечной точке веб-приложения (через хост-компьютер), я получаю следующее сообщение об ошибке:

Хосту '172.21.0.2' не разрешено подключаться к этому серверу MySQL

Это мои текущие настройки:

докер-compose.yml

version: '3'

services:
  app:
    build:
      context: .
      dockerfile: app-dockerfile
    image: app
    ports:
      - 8080:80
    command: java -Dserver.port:80 -jar app-0.1.0.jar

  appdb:
    build:
      context: .
      dockerfile: appdb-dockerfile
    image: appdb

приложение-dockerfile

FROM openjdk:8

WORKDIR /usr/local/bin

COPY ./target/app-0.1.0.jar .

EXPOSE 80/tcp

AppDB-dockerfile

FROM mysql:latest

ENV MYSQL_ROOT_HOST=app
ENV MYSQL_DATABASE=appdbinstance
ENV MYSQL_ROOT_PASSWORD=appdbpassword

WORKDIR /docker-entrypoint-initdb.d

COPY ./dbscripts/master.sql .

application.yml

database:
  host: appdb
  instance: appdbinstance
  port: 3306
  user: root
  password: appdbpassword



Что я пробовал до сих пор:


-> Изменено MYSQL_ROOT_HOST = app до MYSQL_ROOT_HOST =% . Это сработало, но я не хочу, чтобы пользователь root мог подключаться с любого хоста; Я хочу ограничить его только контейнером приложений.


-> Я проверил адрес привязки:

mysqld --verbose --help | grep bind-address

--bind-address=name IP address(es) to bind to. Syntax: address[,address]...,
  --mysqlx-bind-address[=name] 
bind-address                                                 *
mysqlx-bind-address                                          *

Насколько я могу судить, это должно быть нормально, так как позволяет любому удаленному хосту подключаться к mysql.


-> Подумав, что это может быть проблема с конфигурацией приложения, я попытался подключиться к mysql с помощью инструмента CLI mysql внутри контейнера приложения, но я получил то же сообщение об ошибке.


-> Я запустил следующий скрипт, чтобы убедиться, что удаленный пользователь root создан (и был создан):

select user, host from mysql.user where user = 'root';

+------+-----------+
| user | host      |
+------+-----------+
| root | app       |
| root | localhost |
+------+-----------+

-> Я попытался предоставить все привилегии удаленному пользователю root (это не сработало.):

GRANT ALL PRIVILEGES ON appdbinstance.* TO 'root'@'app';

На данный момент, похоже, что суть проблемы корневой среды хоста (MYSQL_ROOT_HOST). Если это так, я не знаю, как решить проблему (кроме установки его в%, что я бы предпочел не делать в целях безопасности). В конечном итоге я пытаюсь настроить сервер mysql таким образом, чтобы он принимал соединения только из контейнера приложения для определенного пользователя (в настоящий момент root) . Любые идеи приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...