Я пытаюсь развернуть веб-приложение 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) . Любые идеи приветствуются.