Доступ запрещен при установлении соединения из контейнера php в контейнер mysql - PullRequest
0 голосов
/ 26 апреля 2020

Я искал в Интернете несколько часов, но не нашел решения своей проблемы. У меня есть 3 контейнера: - nginx - php - mysql

Все они подключены к одной сети.

Если я пытаюсь войти в систему mysql из mysql контейнер, все отлично работает. Если я пытаюсь установить соединение pdo из контейнера php с контейнером mysql, я всегда получаю сообщение «Доступ запрещен для пользователя». Понятия не имею почему. Позвольте мне показать вам, ребята, что происходит.

Это мой docker -компонентный файл:

version: ‘3’

networks:
danvers:

services:
#WebServer Service
danvers-nginx:
image: nginx:stable
container_name: danvers-nginx
ports:
- ‘8080:80’
volumes:
- ./:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- danvers-php
- danvers-mysql-app
networks:
danvers:

#PHP Service
danvers-php:
build:
context: ./
dockerfile: Dockerfile
container_name: danvers-php
volumes:
- ./:/var/www
- ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
depends_on:
- danvers-mysql-app
networks:
danvers:

#MySQL Service for App Database
danvers-mysql-app:
image: mysql:5.7.22
container_name: danvers-mysql-app
restart: unless-stopped
tty: true
ports:
- “33061:3306”
environment:
- MYSQL_ROOT_PASSWORD=securerootpassword
- MYSQL_DATABASE={DB_APP_DATABASE} 
- MYSQL_USER={DB_APP_USERNAME}
- MYSQL_PASSWORD=${DB_APP_PASSWORD}
volumes:
- danvers-app-data:/var/lib/mysql
- ./docker/mysql/my.cnf:/etc/mysql/my.cnf
networks:
danvers:

volumes:
danvers-app-data:

Если я go внутри контейнера danvers- php и открыть интерактив Оболочка для php и попытка сделать соединение pdo Я получаю это:

php > new PDO(‘mysql:host=danvers-mysql-app;dbname=danvers-app’, ‘d-app-conn-user’, ‘cable’);

Warning: Uncaught PDOException: SQLSTATE[HY000] [1045] Access denied for user ‘d-app-conn-user’@‘danvers-php.projectdanvers_danvers’ (using password: YES) in php shell code:1

Stack trace:
#0 php shell code(1): PDO->__construct(‘mysql:host=danv…’, ‘d-app-conn-user’, ‘cable’)
#1 {main}
thrown in php shell code on line 1

Соединение установлено, как я вижу входящий запрос в журнале от danvers- mysql -app. Здесь кажется странным, что пользовательский формат ошибки выглядит странно. Я понятия не имею, откуда взялся «danvers- php .projectdanvers_danvers». Это объединение контейнера php и сети, в которой находятся контейнеры. Я думаю, именно поэтому доступ запрещен, потому что я понятия не имею, как это изменить, поскольку я предположил, что вместо этого должно быть имя mysql контейнера.

Кто-нибудь знает, что я здесь делаю неправильно?

Спасибо за любой ответ или отзыв.

РЕДАКТИРОВАТЬ:
В моем mysql контейнере я вошел в систему с root и получил этот список пользователей:

+ ----------------- + ----------- +
| пользователь | host |
+ ----------------- + ----------- +
| d-app-conn-user | % |
| root | % |
| mysql .session | localhost |
| mysql .sys | localhost |
| root | localhost |
+ ----------------- + ----------- +

Вывод от выбранного пользователя, host from mysql .user

% для имени хоста означает, что имя хоста не имеет значения, если имя пользователя правильное, я должен иметь возможность войти в систему. Учетные данные работают изнутри контейнера mysql, но когда соединение устанавливается из другого контейнера, оно завершается ошибкой. Если я пытаюсь установить соединение с SequelPro с моей локальной машины через порт 33061, это также работает. Проблема существует, только если это межконтейнерное соединение.

EDIT2:
Поэтому я изменил конфигурацию nginx и php с помощью конфигурации php: 7.4- apache в моем Dockerfile и Теперь эта проблема больше не существует. Я могу войти в контейнер mysql из контейнера php. Проблема связана с веб-сервером Nginx.

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