终于在 Docker 中运行了 mqtt,但我想使用 uid/pwd。通过以下方式完成所有工作:
docker exec -it containerid sh
登录服务, mosquitto_passwd -U passwdfile
加密我在文件中的打开密码; 如果我不这样做,mqtt 容器会退出,并说 passwd 文件没有正确加密。
那么,他们是否有可能在 mqtt 服务器期望它之前在 docker 容器中运行 encrypt 命令?
最佳答案
您可以使用 ENTRYPOINT
要运行的脚本 mosquitto_passwd
开始前mosquitto
服务。使用这样的 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_passwd
开始前mosquitto
服务。这个例子有一些问题:特别是因为
mosquitto_passwd
就地修改文件,您需要确保不要尝试转换已转换的文件。希望这能给您一些关于如何构建更完整解决方案的想法。
关于docker - docker 中的 mqtt 服务器 - 一种从 DockerCompose.yaml 运行 <mosquitto_passwd -U> 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46742443/