Docker for Windows环境下Node Red连接MySQL与MongoDB失败问题问询
问题根因定位
- MongoDB连接失败:报错提示找不到
mongodb主机,Docker的link别名在Linux容器内是大小写敏感的,你启动Node-Red时用--link mongoDB注入的主机名是首字母大写的mongoDB,但导入的旧流配置里MongoDB节点填写的主机名是全小写mongodb,匹配不上导致域名解析失败。 - MySQL连接失败:你配置里MySQL节点填写的地址是
127.0.0.1:3306,但容器内的127.0.0.1指向的是Node-Red容器本身,不是宿主机也不是独立的MySQL容器,所以会返回连接拒绝错误。
可执行解决方案
- 方案1:直接修改Node-Red流配置(最快捷,无需重启容器)
- 所有MongoDB节点的连接配置中,把主机名从
mongodb改为mongoDB,也可以直接填写MongoDB容器的固定IP172.17.0.3 - 所有MySQL节点的连接配置中,把主机地址从
127.0.0.1改为MySql,也可以直接填写MySQL容器的固定IP172.17.0.2 - 保存配置后重新部署流即可生效。
- 所有MongoDB节点的连接配置中,把主机名从
- 方案2:调整容器启动参数,兼容旧配置(无需修改原有流配置)
- 删掉现有Node-Red容器,重新执行启动命令,新增别名配置完全适配旧流的主机名规则:
docker run -d -p 1880:1880 -v C:\Docker_Data/Node-Red:/data --network="bridge" --add-host localhost:127.0.0.1 --name NR-Latest-14 --restart unless-stopped --link mongoDB:mongodb --link MySql:mysql nodered/node-red:latest-14 - 其中
--link mongoDB:mongodb是将mongoDB容器的别名设置为小写的mongodb,--link MySql:mysql同理,和你原NAS环境的hosts别名完全一致,旧流不需要任何修改就能正常运行。
- 删掉现有Node-Red容器,重新执行启动命令,新增别名配置完全适配旧流的主机名规则:
- 补充验证步骤:配置调整后可进入Node-Red容器直接验证连通性
- 进入容器命令:
docker exec -it NR-Latest-14 /bin/bash - 验证MongoDB连通:
ping mongodb或curl mongoDB:27017 - 验证MySQL连通:
apt update && apt install telnet -y && telnet MySql 3306
- 进入容器命令:
内容的提问来源于stack exchange,提问作者ShadowGames
相关产品推荐
相关产品推荐

