问题现象Dify 使用junjiem/db_query插件执行 SQL 查询时报错RuntimeError: Error executing SQL: (pymysql.err.OperationalError) (2003, Cant connect to MySQL server on host.docker.internal ([Errno -2] Name or service not known))根本原因plugin_daemon容器内部无法解析host.docker.internal导致无法连接到宿主机上的 MySQL。解决方案步骤 1修改 docker-compose.yaml找到 Dify 项目下的docker-compose.yaml通常位于 Dify 项目根目录的docker/文件夹内。找到plugin_daemon服务配置在restart: always下方添加extra_hostsplugin_daemon: image: langgenius/dify-plugin-daemon:0.6.3-local restart: always extra_hosts: # ← 添加此行 - host.docker.internal:host-gateway # ← 添加此行 env_file: - path: ./envs/core-services/shared.env required: false # ... 以下保持不变步骤 2重启 plugin_daemon 容器cd Dify项目目录/docker docker-compose up -d plugin_daemon步骤 3验证修复确认容器内可解析host.docker.internaldocker exec docker-plugin_daemon-1 sh -c getent ahosts host.docker.internal正常应返回192.168.65.254IPv4地址。Dify App 中 db_query 插件配置参数参数说明示例值db_type数据库类型mysqldb_host数据库地址host.docker.internaldb_port端口3306db_username用户名rootdb_password密码你的密码db_name数据库名要查询的库名db_properties额外属性可选留空query_sqlSQL 查询语句SELECT * FROM table_nameoutput_format输出格式markdown或json备选方案如果extra_hosts不生效方案 A使用宿主机真实 IP在宿主机运行ipconfig获取本机局域网 IP如192.168.x.x在 db_query 插件参数中将db_host设为该 IP 地址方案 B检查 MySQL 配置确保宿主机 MySQL 允许远程连接-- 允许 root 从任意主机连接 ALTER USER root% IDENTIFIED WITH mysql_native_password BY 密码; FLUSH PRIVILEGES;同时检查MySQL 监听0.0.0.0:3306不是127.0.0.1Windows 防火墙允许 3306 端口入站排查命令速查# 查看容器日志 docker logs docker-plugin_daemon-1 ​ # 测试容器内 DNS 解析 docker exec docker-plugin_daemon-1 sh -c getent hosts host.docker.internal ​ # 查看容器网络 docker inspect docker-plugin_daemon-1 --format {{range $net, $v : .NetworkSettings.Networks}}{{$net}}: {{$v.IPAddress}}{{\n}}{{end}} ​ # 进入容器内部 docker exec -it docker-plugin_daemon-1 sh ​ # 查看容器环境变量 docker inspect docker-plugin_daemon-1 --format {{json .Config.Env}} | ConvertFrom-Json ​ # 查看 db_query 插件代码 docker exec docker-plugin_daemon-1 cat /app/storage/cwd/junjiem/db_query-*/tools/sql_query.py ​ # 查看 db_util 工具类SQLAlchemy 连接逻辑 docker exec docker-plugin_daemon-1 cat /app/storage/cwd/junjiem/db_query-*/tools/db_util.py原理说明host.docker.internal是 Docker Desktop 提供的特殊 DNS 名称用于从容器访问宿主机服务Docker Desktop for Windows 通过host-gateway自动解析为网关 IP192.168.65.254或fdc4:f303:9324::254早于 18.03 的 Docker Desktop 版本或特定网络配置下可能不支持需通过extra_hosts手动注入db_query插件是 Dify 插件市场中的社区插件运行在plugin_daemon容器内该容器默认不带host.docker.internal解析