问题描述
晚上,
从docker-compose设置一个相当简单的Mosquitto-> Node-Red-> Mariadb部署。撰写文件如下:
version: '3.8'
services:
mqtt:
container_name: mosquitto
image: eclipse-mosquitto:latest
restart: always
ports:
- "1883:1883"
volumes:
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf
- /mosquitto/data
- /mosquitto/log
nodered:
container_name: node-red
image: nodered/node-red:latest
restart: always
ports:
- "1880:1880"
volumes:
- node_red_user_data:/data
links:
- "mariadb:mariadb"
mariadb:
container_name: mariadb
image: mariadb:latest
restart: always
command: --default-authentication-plugin=MysqL_native_password
ports:
- "3306:3306"
- "33060:33060"
environment:
- MysqL_RANDOM_ROOT_PASSWORD=yes
- MysqL_DATABASE=test
- MysqL_USER=testuser
- MysqL_PASSWORD=password
volumes:
- mariadb_data_container:/var/lib/MysqL
volumes:
mariadb_data_container:
node_red_user_data:
mosquitto_persistence:
networks:
default:
name: primary
蚊子到Node-Red的运行良好,并且我已经在mariadb中设置了数据库和表,但是我没有运气让Node-Red与Maria对话。让这个错误回到我身边。
Error: connect ECONNREFUSED 127.0.0.1:3306
有问题的节点红色节点如下:
[{"id":"d93d7d2b.ee27f","type":"MysqL","z":"ec0540ab.8b4e2","mydb":"68416de0.8f91a4","name":"XDK Environmental Data","x":750,"y":260,"wires":[["d0d7439f.9b88d"]]},{"id":"68416de0.8f91a4","type":"MysqLdatabase","z":"","name":"Write to mariadb","host":"localhost","port":"3306","db":"XDK_FEM","tz":""}
在某种程度上有用的情况下,此处为全节点红色流。
[{"id":"ec0540ab.8b4e2","type":"tab","label":"MQTT_MysqL_write","disabled":false,"info":""},{"id":"772011e7.51dd4","type":"mqtt in","name":"XDK1_Output","topic":"BCDS/XDK110/example/out","qos":"2","datatype":"utf8","broker":"ac9b691.6c35998","x":90,"wires":[["f7d34d6b.63919","8336338b.e648c"]]},{"id":"d0d7439f.9b88d","type":"debug","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targettype":"full","statusVal":"","statusType":"auto","x":990,"wires":[]},{"id":"d79d4ae0.fcf958","type":"function","name":"Create query in topic","func":"var out = \"INSERT INTO XDK1_raw (timestamp,message)\"\nout = out + \"VALUES ('\" + new Date().toISOString() + \"','\" \nout = out + msg.payload + \"');\"\nmsg.topic=out;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":500,"wires":[["d93d7d2b.ee27f"]]},{"id":"9b43a338.781","type":"comment","name":"Log everything","info":"","x":100,"y":200,{"id":"d93d7d2b.ee27f",{"id":"f7d34d6b.63919","active":false,"complete":"payload","targettype":"msg","x":310,"y":180,{"id":"8336338b.e648c","type":"json","property":"payload","action":"str","pretty":true,"x":270,"y":300,"wires":[["cbee55ed.b7a668","d79d4ae0.fcf958"]]},{"id":"cbee55ed.b7a668","complete":"false","x":480,"y":380,{"id":"ac9b691.6c35998","type":"mqtt-broker","name":"XDK_Mosquitto","broker":"192.168.1.115","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closetopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},"tz":""}]
我尝试了端口和配置的各种组合,在将自己深入研究到一个漏洞之后,我只是重置了所有内容以从头开始。
任何见识都深表感谢!
编辑
我意识到这对面对相同图像的人来说不是一个非常有用的更新,但是最后我删除了该容器,然后再次从docker-compose开始运行,并且成功了。主只知道。工作原理是,在找到正确答案(使用“ mariadb”而不是“ localhost”)之前,我尝试尝试错误答案时遇到了麻烦。
解决方法
要记住的重要一点是,每个容器都具有自己的环回设备(lo,127.0.0.1),容器的主机也具有自己的环回设备,并且它们完全独立。
因此您不能从Node-RED容器中将MariaDB容器引用为127.0.0.1
,因为该地址指向Node-RED容器。
在输入详细信息或mariadb配置节点时,您需要使用主机名mariadb
而不是127.0.0.1
。