Delphi Firedac 在 docker 容器中连接到 MySQL
Posted
技术标签:
【中文标题】Delphi Firedac 在 docker 容器中连接到 MySQL【英文标题】:Delphi Firedac connect to MySQL in docker container 【发布时间】:2021-12-10 10:04:50 【问题描述】:我使用 Docker 的默认设置在我的 Windows 10 上创建了一个 mysql 映像。
我使用这个命令启动了容器:
docker run --name local-mysql --network="host" -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d <your-docker-Image>
我使用了 --network 参数,希望可以从我的主机连接到容器。
然后我运行这个命令从 MySQL shell 连接到容器
docker exec -it mysql bash -l
我可以使用这个连接
mysql -h localhost -P 3306 --protocol=tcp -u root -p
使用Delphi并设置FireDac使用DriverId MySQL,我指定主机为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 <your-docker-Image>
我使用不同的主机端口 (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
一切都很好。希望这对尝试相同的人有所帮助。
【讨论】:
会不会是您已经在您的主机上运行了一个 mysql,阻止了 3306 被重用以映射到容器?您应该能够在任何端口上运行它,不是吗? (PS我正在尝试相反,从delphi docker应用程序连接到主机上运行的mysql :-)然后在另一个docker容器中运行......以上是关于Delphi Firedac 在 docker 容器中连接到 MySQL的主要内容,如果未能解决你的问题,请参考以下文章
使用 FireDac 在 Delphi 中动态创建和调用存储过程的正确方法是啥?