Не удается подключиться к базе данных: доступ запрещен для пользователя - PullRequest
0 голосов
/ 03 апреля 2019

Я устанавливаю приложение CakePHP 3.7 и использую docker compose. У меня также есть служба mysql, к которой я пытаюсь подключиться, но я получаю эту ошибку: Access denied for user 'ws_user'@'172.20.0.3' (using password: YES)

Я даю разрешения пользователю следующим образом: GRANT ALL PRIVILEGES ON mydb.* TO 'ws_user'@'%' IDENTIFIED BY '<superSecretPasswordHere>'.

Если я использую учетные данные root, cakephp сможет установить соединение просто отлично.

Я также предоставляю службу mysql через порт 3030 моей локальной машине, и я в состоянии легко установить учетные данные ws_user.

Я также настроил запуск mysql на моем локальном компьютере с теми же учетными данными, и торт может нормально подключаться к хосту 172.17.0.1.

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

Вот мой файл docker-compose:

version: '2'
# define all services
services:
  # our service is called CakePHP ;-)
  cakephp:
    # we want to use the image which is build from our Dockerfile
    build:
      context: .
      dockerfile: Dockerfile
    # apache is running on port 80 but we want to expose this to port 4000 on our local machine
    ports:
      - "80:80"
    # we are depending on the mysql backend
    depends_on:
      - mysql
    # we mount the working dir into the container, handy for development 
    volumes:
      - .:/var/www/html/
    environment:
      - SECURITY_SALT
      - MYSQL_HOST
      - MYSQL_USERNAME
      - MYSQL_PASSWORD
  mysql:
      # we use the mysql base image, version 5.6.36
      #image: mysql:5.6.39
      build: 
        context: .
        dockerfile: Dockerfile.mysql
      ports:
        - "3030:3006"
      # we mount a datavolume to make sure we don't lose data
      volumes:
        - mysql_data:/var/lib/mysql
      # setting some envvars to create the DB
      environment:
        - MYSQL_ROOT_PASSWORD
        - MYSQL_DATABASE
volumes:
    mysql_data:

1 Ответ

1 голос
/ 03 апреля 2019

Из "cakephp" вы подключаетесь к "mysql: 3306". Это должно быть в вашей строке подключения.

С вашего хоста вы можете подключиться к «127.0.0.1:3030», чтобы убедиться, что ваша база данных принимает удаленный вход.

Тогда вы должны проверить учетные данные, чтобы они были одинаковыми. Я предлагаю вам поместить их в файл .env, а затем проверить соединение с помощью «копирования-вставки» значений.

вы можете проверить значения, которые фактически передаются в контейнеры, выполнив:

docker-compose config

Здесь показана точная версия файла docker-compose, который будет отправлен в механизм докера.

Надеюсь, это сработает, в противном случае оставьте мне комментарий.

...