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集群部署也会分享给大家!!!

  • 35
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个错误提示是因为你在当前用户下没有权限创建目录。根据引用\[3\]中的解释,使用`su - USERNAME`命令可以完全切换到指定用户的工作环境,包括工作目录和环境变量。所以,你可以尝试使用`su -`命令切换到root用户,然后再执行`mkdir`命令创建目录。具体操作如下: 1. 执行`su -`命令,输入root用户的密码进行切换。 2. 切换到root用户后,再次执行`mkdir`命令创建目录。 这样,你就可以在root用户下拥有创建目录的权限了。 #### 引用[.reference_title] - *1* [mkdir: cannot create directory ‘a1’: Permission denied](https://blog.csdn.net/qq_69967376/article/details/127171185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [docker出现问题:启动nexus时报错mkdir: cannot create directory : Permission denied解决方案](https://blog.csdn.net/shi_hong_fei_hei/article/details/115051031)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mkdir: cannot create directory ‘jdk’: Permission denied](https://blog.csdn.net/weixin_42490383/article/details/122380918)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清淡的粥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值