Docker部署EMQX及简单使用(解决mkdir: cannot create directory ‘/opt/emqx/data/configs’: Permission denied)

一、Docker部署EMQX

前言

先介绍一下EMQX是什么,EMQX 可以简单理解为一个MQTT的服务器。是一款「无限连接,任意集成,随处运行」的大规模分布式物联网接入平台,同时作为一个高性能、可扩展的 MQTT 消息服务器,它可以为物联网(IoT)应用提供可靠的实时消息传输和设备连接解决方案。
官方教程https://docs.emqx.com/zh/emqx/latest/deploy/install-docker-ce.html

注:因为服务器部署RabbitMq,1883端口占用,所以映射端口我在前面都加了一个5 。

(一)获取 Docker 镜像

  • docker pull emqx/emqx:5.7.1

(二)启动 Docker 容器(未挂载目录)

  • docker run -d --name emqx -p 51883:1883 -p 58083:8083 -p 58084:8084 -p 58883:8883 -p 51083:18083 emqx/emqx:5.7.1

(三)启动 Docker 容器(挂载目录)

如果需要持久 Docker 容器 ,请将以下目录挂载到容器外部,这样即使容器被删除数据也不会丢失。

  • /opt/emqx/data
  • /opt/emqx/log

关于 EMQX 目录结构的详细信息,可参考 EMQX 官方文件和目录介绍
https://docs.emqx.com/zh/emqx/latest/deploy/install.html#文件和目录

启动容器并挂载目录:

  • docker run -d --name emqx -p 51883:1883 -p 58083:8083 -p 58084:8084 -p 58883:8883 -p 51083:18083 -v /var/lib/emqx/data:/opt/emqx/data -v /var/lib/emqx/log:/opt/emqx/log emqx/emqx:5.7.1

至此,EMQX就部署完成了!
但是在执行含挂载目录启动命令时会遇见问题。

二、部署问题

(一)问题分析

按照 EMQX官方文档启动,默认是不带目录挂载的。
5.1.3 版本需要挂载出来以下目录才能持久化:

  • /opt/emqx/data
  • /opt/emqx/etc
  • /opt/emqx/log

但是启动加上 -v 挂载后, 会报错:

mkdir: cannot create directory ‘/opt/emqx/data/configs’: Permission denied

数据卷挂载提示权限不足解决,如下图所示:
在这里插入图片描述

原因很简单,EMQX 的镜像内 Linux 用户为 emqx,组为emqx,并非 root 用户。

-v 创建目录时候默认用的一般是 root 用户,这时候 emqx 在 root 下的目录创建文件自然就权限不足。

这一点进入容器中可以看到,如下图所示:

  • docker exec -it emqx/emqx:5.7.1 /bin/bash
  • ls -l

在这里插入图片描述

EMQX 不使用 root 应该有他的原因,现在重点是怎么解决这个问题。

一种思路是宿主机也创建 emqx 这个用户,并且保持用户 id 和容器内部的一致,然后先创建好要挂载的目录,这样就可以跳过权限问题。
我觉得这个方法很麻烦,容器居然还要依赖环境…

(二)解决方案

查阅了 Docker 的卷挂载相关的内容,发现匿名卷和具名卷可以兼容权限问题。匿名卷可读性不太好,建议创建具名卷。

1.创建一个具名卷

  • docker volume create emqx_data1

在这里插入图片描述

2.启动容器

启动加上 -v emqx-data1:/opt/emqx/

  • docker run -d --name emqx1 -p 51883:1883 -p 58083:8083 -p 58084:8084 -p 58883:8883 -p 51083:18083 -v emqx_data1:/opt/emqx/ emqx/emqx:5.7.1

在这里插入图片描述
启动成功!!!

3.查看具名卷

  • docker volume list

在这里插入图片描述

4.查看具名卷详情

  • docker volume inspect emqx_data1

在这里插入图片描述

三、访问EMQX web管理页面

在浏览器中输入以下链接(51083映射的是18083,如果是阿里云服务器,需要去阿里云控制台开放一下端口):

  • 服务器ip:51083

出现以下页面就大功告成了!!!
默认账号:admin 默认密码:public
首次登录进去之后,会提示你修改密码。
在这里插入图片描述

在这里插入图片描述

总结

本篇博客只是介绍一下如何Docker启动EMQX。
笔者在其中跌跌撞撞历经坎坷,所以整理了一下踩坑过程分享给大家。
生产环境肯定是需要集群部署的,后续docker-compose EMQX集群部署、K8s EMQX集群部署也会分享给大家!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清淡的粥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值