Ошибка подключения к инстансу MySQL в докере - PullRequest
0 голосов
/ 13 мая 2019

У меня действительно простое приложение в dotnet core 2.1, которое взаимодействует с базой данных MySQL. Приложение использует Entity Framework следующим образом:

var connectionString = Configuration.GetConnectionString("DatabaseConnection");
services.AddDbContext<ChtrDbContext>(options => options.UseMySql(connectionString));

Где строка подключения выглядит так:

"DatabaseConnection": "Server=db;port=3306;Database=chtr;userid=dbuser;Password=dbuserpassword"

Приложение докеризировано, и я использую docker-compose up --build для запуска среды.

Когда я перехожу к localhost: 8080 / graphql, который является моей конечной точкой GraphiQL, и я пытаюсь выполнить простой запрос к базе данных, я не могу войти в систему. Это файл журнала:

 Access denied for user 'dbuser'@'172.19.0.3' (using password: YES)
chtr.server_1  |    at MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 360

В нем говорится, что dbuser, который является настроенным пользователем, не имеет прав доступа к моей базе данных.

Запуск docker ps, в котором перечислены все мои контейнеры. Я вижу, что контейнер mysql запущен. Затем я снова запускаю docker inspect chtrserver_db_1, который является именем контейнера. Прокрутка вниз к разделу Config этого файла json дает мне следующее:

"Env": [
                "MYSQL_RANDOM_ROOT_PASSWORD=1",
                "MYSQL_DATABASE=chtr",
                "MYSQL_USER=dbuser",
                "MYSQL_PASSWORD=dbuserpassword",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.7",
                "MYSQL_MAJOR=5.7",
                "MYSQL_VERSION=5.7.26-1debian9"
            ],

Хорошо, я подтвердил, что Docker-контейнер работает и учетные данные, указанные в соединительной строке, совпадают с теми, которые настроены в контейнере. Почему я не могу войти?

Файл docker-compose.yml выглядит следующим образом:

версия: '3.0'

services:
   db:
     image: mysql:5.7
     environment:
       MYSQL_RANDOM_ROOT_PASSWORD: 1
       MYSQL_DATABASE: chtr
       MYSQL_USER: dbuser
       MYSQL_PASSWORD: dbuserpassword
     volumes:
       - dbdata:/var/lib/mysql
       - ./Scripts:/docker-entrypoint-Dataseed.d
     restart: always

   chtr.server:
     depends_on:
       - db
     image: trebias/chtr.server
     build:
       context: .
     ports:
       - "8080:80"

volumes:
    dbdata:

Любые предложения о том, как двигаться вперед?

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Вы на 100% уверены, что учетные данные соответствуют пользователю в MySQL? Обратите внимание, что MYSQL_USER и MYSQL_PASSWORD используются только один раз, когда база данных создается впервые, поэтому, если вы изменили их при сохранении базы данных, то ваше предположение, что переменные ENV для учетных данных совпадают с переменными в базе данных, больше не соответствует действительности.

Если это так, то вы можете удалить свою базу данных и начать все сначала. Поскольку вы используете именованный том, вам нужно удалить его вручную (docker rm никогда не удалит именованный том при использовании команды rm, только анонимные).

Чтобы удалить именованный том, вы можете использовать следующую команду:

docker volume rm xxxx_dbdata

Где xxxx должно быть именем вашего проекта (каталог, в котором находится ваш файл композиции). Вы также можете увидеть список томов докера, выполнив docker volume ls.

0 голосов
/ 14 мая 2019

Убедитесь, что ваши порты указаны в вашем docker-compose

services:
    db:
     image: mysql:5.7
     environment:
       MYSQL_RANDOM_ROOT_PASSWORD: 1
       MYSQL_DATABASE: chtr
       MYSQL_USER: dbuser
       MYSQL_PASSWORD: dbuserpassword
     volumes:
       - dbdata:/var/lib/mysql
       - ./Scripts:/docker-entrypoint-Dataseed.d
     restart: always
     ports:
       - "3306:3306"

Алос, ты создаешь сеть в своем docker-compose?

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