Я создаю файл Docker Compose, который включает в себя службу PHP и службу MySQL. В рамках инициализации контейнера MySQL я создаю нового пользователя MySQL, который контейнер PHP будет использовать для запроса к базе данных. Прямо сейчас я создаю пользователя следующим образом:
CREATE USER 'myuser'@'%' IDENTIFIED WITH mysql_native_password BY 'mypass';
GRANT INSERT, UPDATE, SELECT, DELETE ON mydb.* TO 'myuser'@'%';
Это работает — мой PHP-скрипт может успешно запрашивать базу данных MySQL.
Тем не менее, я хотел бы иметь возможность ограничить пользователя контейнером PHP, вместо того, чтобы разрешать подключения из любого места ('%'
). Я попытался воссоздать моего пользователя, как это:
CREATE USER 'myuser'@'php' IDENTIFIED WITH mysql_native_password BY 'mypass';
GRANT INSERT, UPDATE, SELECT, DELETE ON mydb.* TO 'myuser'@'php';
Однако, когда я запускаю тот же скрипт PHP, я получаю эту ошибку:
Access denied for user 'myuser'@'my-docker-container.my-docker-project_my-docker-network'
Основываясь на этой ошибке, я теоретически мог создать своего пользователя с ограничением хоста my-docker-container.my-docker-project_my-docker-network
, Тем не менее, в моем конкретном случае эта строка хоста еще длиннее и превышает ограничение в 60 символов, установленное MySQL.
Есть ли способ настроить мои контейнеры, чтобы мой второй пример ('myuser'@'php'
) буду работать?
Вот как мои службы PHP и MySQL определены в моем docker-compose.yml
:
php:
image: my-php-image
container_name: my-php-container
build: ./php
networks:
- my-network
mysql:
image: my-mysql-image
container_name: my-mysql-container
build: ./mysql
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- my-mysql-volume:/var/lib/mysql
networks:
- my-network
Задача ещё не решена.
Других решений пока нет …