docker中的mqtt服务器 - 一种运行DockerCompose.yaml中的的方法
问题描述:
终于在Docker中运行mqtt,但我想使用uid/pwd。得到了这一切工作,通过:docker中的mqtt服务器 - 一种运行DockerCompose.yaml中的<mosquitto_passwd -U>的方法
- 1日使用mosquitto.conf文件不要求passwd文件,
- 通过DockerCompose.yaml从MQTT图像3.具有发射了MQTT服务创建,
- 然后登录到服务
docker exec -it containerid sh
, - 然后我在服务中运行命令
mosquitto_passwd -U passwdfile
来加密我在文件中打开的密码; - 然后我停止码头服务堆栈,更改密码文件位置的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
就地修改了文件,所以您需要确保不要尝试转换已经转换的文件。
希望这给你一些关于如何构建更完整的解决方案的想法。
非常感谢您提供非常完整的答案。我从来没有真正理解如何使用入口点。 –