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

标签 docker mqtt

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

  • 第一次使用不要求 passwd 文件的 mosquitto.conf 文件,
  • 通过来自 mqtt 镜像的 DockerCompose.yaml 启动 mqtt 服务 3. 已经创建,
  • 然后使用 docker exec -it containerid sh 登录服务,
  • 然后,我在服务中运行命令 mosquitto_passwd -U passwdfile加密我在文件中的打开密码;
  • 然后我停止docker服务的堆栈,将mosquitto.conf更改为密码文件的位置,再次stsrtup堆栈和服务,然后它就可以工作了。

  • 如果我不这样做,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/

    相关文章:

    c++ - 使用 PAHO c/cpp 在代理后面使用 MQTT

    node.js - Nodejs 安全 MQTT 连接

    Docker 无法找到文件,即使给出了正确的路径

    docker - Ubuntu 上缺少 .docker 文件夹

    docker - 构建下载大文件的Docker镜像失败并出现错误

    java - HiveMQ Client中如何获取客户端连接信息? (MQTT)

    javascript - MQTT Paho Javascript - 是否可以为每个订阅定义一个处理函数?

    java - 如何从 Mosquitto 清除所有保留的 mqtt 消息?

    Docker 推送到 Heroku "Unexpected HTTP status: 500 internal server error"

    io - 在生产环境中,在 LXC 或 Docker 中运行 Cassandra 是个好主意吗?