docker中的mqtt服务器 – 一种从DockerCompose.yaml运行<mosquitto_passwd -U>的方法
终于得到了mqtt在Docker中运行,但我想使用uid / pwd。 通过以下方式完成所有工作:
- 第一次使用不要求passwd文件的mosquitto.conf文件,
- 通过来自mqtt图像的DockerCompose.yaml启动mqtt服务3.创build,
- 然后用
docker exec -it containerid sh
login服务, - 然后,我在服务中运行命令
mosquitto_passwd -U passwdfile
encryption我在文件中打开的密码; - 然后,我停止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的想法。