docker中的mqtt服务器 - 一种运行DockerCompose.yaml中的的方法

问题描述:

终于在Docker中运行mqtt,但我想使用uid/pwd。得到了这一切工作,通过:docker中的mqtt服务器 - 一种运行DockerCompose.yaml中的<mosquitto_passwd -U>的方法

  1. 1日使用mosquitto.conf文件不要求passwd文件,
  2. 通过DockerCompose.yaml从MQTT图像3.具有发射了MQTT服务创建,
  3. 然后登录到服务docker exec -it containerid sh,
  4. 然后我在服务中运行命令mosquitto_passwd -U passwdfile来加密我在文件中打开的密码;
  5. 然后我停止码头服务堆栈,更改密码文件位置的mosquitto.conf,stsrtup堆栈和服务再次,然后它工作。

如果我不这样做,mqtt容器退出,并说passwd文件没有正确加密。

那么,他们的方式可能会在mqtt服务器期待之前在docker容器中运行encrypt命令?

在启动mosquitto服务之前,您可以使用ENTRYPOINT脚本运行mosquitto_passwd。使用Dockerfile这样的:

FROM eclipse-mosquitto 

COPY entrypoint.sh /entrypoint.sh 
ENTRYPOINT ["sh", "/entrypoint.sh"] 
CMD ["/usr/sbin/mosquitto","-c","/mosquitto/config/mosquitto.conf"] 

而一个entrypoint.sh脚本,看起来像:

#!/bin/sh 

PASSWDFILE=/etc/mosquitto/passwd 

if [ -f $PASSWDFILE ]; then 
    echo "converting password file" 
    mosquitto_passwd -U $PASSWDFILE 
fi 

exec "[email protected]" 

当你从这个图像启动一个容器,它就会启动mosquitto服务之前运行mosquitto_passwd

这个例子有一些问题:特别是,因为mosquitto_passwd就地修改了文件,所以您需要确保不要尝试转换已经转换的文件。

希望这给你一些关于如何构建更完整的解决方案的想法。

+0

非常感谢您提供非常完整的答案。我从来没有真正理解如何使用入口点。 –