终于在 Docker 中运行了 mqtt,但我想使用 uid/pwd。通过以下方式让一切正常工作:
docker exec -it containerid sh,mosquitto_passwd -U passwdfile来加密文件中的打开密码;如果我不这样做,mqtt 容器将退出,并表示 passwd 文件未正确加密。
那么,他们是否可以在 mqtt 服务器期望之前在 docker 容器中运行加密命令?
您可以使用脚本在启动服务之前ENTRYPOINT运行。使用如下 Dockerfile:mosquitto_passwdmosquitto
FROM eclipse-mosquitto
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["sh", "/entrypoint.sh"]
CMD ["/usr/sbin/mosquitto","-c","/mosquitto/config/mosquitto.conf"]
Run Code Online (Sandbox Code Playgroud)
和一个entrypoint.sh看起来像这样的脚本:
#!/bin/sh
PASSWDFILE=/etc/mosquitto/passwd
if [ -f $PASSWDFILE ]; then
echo "converting password file"
mosquitto_passwd -U $PASSWDFILE
fi
exec "$@"
Run Code Online (Sandbox Code Playgroud)
当您从此映像启动容器时,它将mosquitto_passwd在启动mosquitto服务之前运行。
此示例存在一些问题:特别是,由于mosquitto_passwd就地修改了文件,因此您需要确保不会尝试转换已转换的文件。
希望这能为您提供一些关于如何构建更完整的解决方案的想法。
mosquito_passwd另一种选择是在容器内部运行,即在容器外壳上运行。这是对我有用的方法(请注意,我将配置目录保留在容器外部):
mosquitto_passwords在配置目录中创建您的文件
进入容器
$ docker exec -it mosquitto sh
Run Code Online (Sandbox Code Playgroud)
(mosquitto灭蚊容器的名称在哪里)
/ $ cd mosquitto/
/mosquitto $ ls
config data log
/mosquitto $ cd config/
/mosquitto/config $ ls
mosquitto.conf mosquitto_passwords
Run Code Online (Sandbox Code Playgroud)
/mosquitto/config $ mosquitto_passwd -U mosquitto_passwords
Run Code Online (Sandbox Code Playgroud)
如果您收到类似错误
Error: Unable to open password file /mosquitto/config/mosquitto_passwords. Permission denied.
Run Code Online (Sandbox Code Playgroud)
您需要确保容器用户可以访问您的密码文件和配置目录。找出哪个用户正在执行此操作
/mosquitto/config $ whoami
whoami: unknown uid 1000
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下你可以这样做
$ sudo chown 1000 config
$ sudo chown 1000 config/mosquitto_passwords
Run Code Online (Sandbox Code Playgroud)
在那之后,
/mosquitto/config $ mosquitto_passwd -U mosquitto_passwords
Run Code Online (Sandbox Code Playgroud)
应该可以正常工作,你就完成了。
/mosquitto/config $ exit
Run Code Online (Sandbox Code Playgroud)
不要忘记将您的mosquitto.conf密码指向您的新密码文件。
| 归档时间: |
|
| 查看次数: |
15541 次 |
| 最近记录: |