Docker安装部署MQTT服务mosquitto
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
mosquitto一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。
docker安装mosquitto
mosquitto的docker安装部署mosquitto简单,但是很难保证正常运行。主要出现的问题就是权限问题。
1527070286: Error: Unable to open log file /var/log/mosquitto.log for writing.
权限问题,即使按网上的解决问题将mosquitto目录文件设为755也解决不了。后来按照设置mosquitto容器中的user id和docker的执行id相同解决。
docker-compose部署mosquitto
#创建目录
mkdir -p /mosquitto/config
mkdir -p /mosquitto/data
mkdir -p /mosquitto/log
#初始化配置文件
vi /mosquitto/config/mosquitto.conf
persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log
#docker-compose.yml
mosquitto:
image: eclipse-mosquitto
container_name: mosquitto
user: 1000:995 #uid=1002(docker) gid=1002(docker) groups=1002(docker)
hostname: mosquitto
restart: always
ports:
- 1883:1883
- 9001:9001
volumes:
- ${USERDIR}/mosquitto:/mosquitto
- ${USERDIR}/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
- ${USERDIR}/mosquitto/log:/mosquitto/log
- ${USERDIR}/mosquitto/data:/mosquitto/data
#docker-compose部署容器
docker-compose -f ./docker-compose.yml up -d
mosquitto用户配置
1.配置文件添加以下配置
# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /mosquitto/config/pwfile.conf
2.进入容器
docker exec -it mosquitto sh
3.生成密码
mosquitto_passwd -c /mosquitto/config/pwfile.conf admin
mosquitto测试
主机安装mosquitto_client,进行测试
sudo apt-get install mosquitto-clients
#订阅消息
mosquitto_sub -h host -t "test" -u admin -P password
#另一终端发布消息
mosquitto_pub -t "test" -m "Hello~~!!" -u admin -P password
订阅方可以收到Hello信息。