docker中的mqtt服务器 – 一种从DockerCompose.yaml运行<mosquitto_passwd -U>的方法

终于得到了mqtt在Docker中运行,但我想使用uid / pwd。 通过以下方式完成所有工作:

  1. 第一次使用不要求passwd文件的mosquitto.conf文件,
  2. 通过来自mqtt图像的DockerCompose.yaml启动mqtt服务3.创build,
  3. 然后用docker exec -it containerid shlogin服务,
  4. 然后,我在服务中运行命令mosquitto_passwd -U passwdfileencryption我在文件中打开的密码;
  5. 然后,我停止docker服务的堆栈,将密码文件的位置更改为mosquitto.conf,再次启动堆栈和服务,然后运行。

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

那么,在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 "$@" 

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

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

希望这给你一些关于如何build立一个更完整的解决scheme的想法。