docker中的mqtt服务器—运行<;MOSQUITO_passwd-U>;来自DockerCompose.yaml

docker中的mqtt服务器—运行<;MOSQUITO_passwd-U>;来自DockerCompose.yaml,docker,mqtt,Docker,Mqtt,终于在Docker中运行了mqtt,但我想使用uid/pwd。通过以下方式实现了所有功能: 首先,使用不要求passwd文件的mosquitcho.conf文件 从mqtt映像3通过DockerCompose.yaml启动mqtt服务。创造了, 然后使用docker exec-it containerid sh登录服务 然后,在服务中,我运行命令mosquitto_passwd-U passwdfile对文件中打开的密码进行加密 然后我停止docker服务的堆栈,更改mosquitto.conf

终于在Docker中运行了mqtt,但我想使用uid/pwd。通过以下方式实现了所有功能:

  • 首先,使用不要求passwd文件的mosquitcho.conf文件
  • 从mqtt映像3通过DockerCompose.yaml启动mqtt服务。创造了,
  • 然后使用docker exec-it containerid sh
    登录服务
  • 然后,在服务中,我运行命令
    mosquitto_passwd-U passwdfile
    对文件中打开的密码进行加密
  • 然后我停止docker服务的堆栈,更改mosquitto.conf作为密码文件的位置,再次stsrtup堆栈和服务,然后它工作
  • 如果我不这样做,mqtt容器将退出,并表示passwd文件未正确加密


    那么,他们是否可以在mqtt服务器预期之前在docker容器中运行encrypt命令?

    在启动
    mosquitto
    服务之前,可以使用
    ENTRYPOINT
    脚本运行
    mosquitto\u 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\u passwd

    此示例中存在一些问题:特别是,由于
    mosquito\u passwd
    会就地修改文件,因此需要确保不尝试转换已转换的文件


    希望这能为您提供一些关于如何构建更完整解决方案的想法。

    另一种方法是直接使用eclipse mosquitto docker容器创建文件,然后复制创建的文件。这很有用,尤其是当您只想为一个或两个用户创建密码文件时

    启动docker容器,但覆盖入口点

    docker run -it --entrypoint sh -v $(pwd):/pwd eclipse-mosquitto
    
    这里我还使用了卷装载选项,将当前目录装载到位于
    /path
    的容器中

    这将启动一个shell

    cd /path   # if you've opted to do this
    mosquitto_passwd -b -c passwd FreddaBlogs ABetterPassw0rdGoesHere
    cat passwd
    # cut'n'paste the output
    

    ctrl-d
    退出shell-文件将在本地目录中创建。由于这是由根用户在docker容器中创建的,因此您可能需要更改所有者权限等。

    另一种选择是在容器内部,即在容器外壳上运行
    蚊子路径。以下是对我有效的方法(请注意,我在容器外部保留了配置目录):

  • 在config目录中创建您的
    mosquitto\u密码
    文件

  • 进入容器

  • (其中
    mosquitto
    是mosquitto容器的名称)

  • 导航到您的密码文件
  • 运行mosquitto_passwd散列您的密码文件
  • 如果你遇到这样的错误

    Error: Unable to open password file /mosquitto/config/mosquitto_passwords. Permission denied.
    
    您需要确保容器用户可以访问您的密码文件和配置目录。要了解正在使用的用户,请执行以下操作:

    /mosquitto/config $ whoami
    whoami: unknown uid 1000
    
    所以在这种情况下你可以

    $ sudo chown 1000 config
    $ sudo chown 1000 config/mosquitto_passwords
    
    此后,

    /mosquitto/config $ mosquitto_passwd -U mosquitto_passwords
    
    应该很好,你就完蛋了

  • 退出容器

  • 不要忘记将您的
    mosquitto.conf
    指向您的新密码文件。

    非常感谢您提供了非常完整的答案。我从来没有真正了解入口点是如何使用的。
    /mosquitto/config $ whoami
    whoami: unknown uid 1000
    
    $ sudo chown 1000 config
    $ sudo chown 1000 config/mosquitto_passwords
    
    /mosquitto/config $ mosquitto_passwd -U mosquitto_passwords
    
    /mosquitto/config $ exit