Delphi Firedac подключается к MySQL в контейнере docker

#mysql #docker #firedac #delphi-11-alexandria

Вопрос:

Я создал образ MySQL в своей Windows 10, используя настройки по умолчанию из Docker.

Я запустил контейнер с помощью этой команды:

 docker run --name local-mysql --network="host" -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d lt;your-docker-Imagegt;  

Я использовал параметр —network в надежде, что смогу подключиться к контейнеру с моего хост-компьютера.

Затем я запустил эту команду для подключения к контейнеру из оболочки MySQL

 docker exec -it mysql bash -l  

Я смог подключиться, используя это

 mysql -h localhost -P 3306 --protocol=tcp -u root -p  

Используя Delphi и установив FireDAC для использования MySQL DriverID, я указал хост как localhost, порт 3306, пользователя как root и пароль.

Но я получаю эту ошибку подключения

 [FireDAC][Phys][MySQL] Cannot connect to MySQL server on 'localhost:3306' (10061)  

Я пытался использовать 127.0.0.1 и 0.0.0.0 без успеха и с той же ошибкой.

Я был бы признателен, если бы кто-нибудь попробовал использовать Delphi FireDAC для подключения к контейнеру MySQL, размещенному на том же компьютере.

Заранее спасибо.

Ответ №1:

Я смог решить эту проблему, используя эту команду для запуска образа

 docker run --name local-mysql -p 127.0.0.1:3307:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d lt;your-docker-Imagegt;  

Я использовал другой порт хоста (3307) для сопоставления с 3306 по умолчанию

Сначала я смог протестировать его с помощью bash

 mysql -h 127.0.0.1 -P 3306 -u root -p  

И в Delphi FireDAC я использовал следующее для подключения

 Host=127.0.0.1  Port=3307  User_Name=root  Password=my-secret-pw  

И все хорошо. Надеюсь, это поможет кому-то, кто пытается сделать то же самое.