2017-10-14 4 views
0

마지막으로 Docker에서 mqtt가 실행 중이지만 uid/pwd를 사용하고 싶습니다. docker의 mqtt 서버 - DockerCompose.yaml에서 <mosquitto_passwd -U>를 실행하는 방법

  • 3.이 가지고있는 MQTT 이미지에서 DockerCompose.yaml 통해 MQTT 서비스를 발사, passwd 파일을 요청하지 않는 mosquitto.conf 파일을 사용

    1. 1 : 그것은 모두에 의해, 작업 당함
    2. docker exec -it containerid sh,
    3. 으로 서비스에 로그인 한 다음 서비스에 열려있는 비밀번호를 암호화하려면 mosquitto_passwd -U passwdfile 명령을 실행하십시오.
    4. 그러면 도커 서비스 스택을 중지하고 암호 파일의 위치에 대한 mosquitto.conf를 변경하고 스택 및 서비스를 다시 stsrtup하면 작동합니다.

    이렇게하지 않으면 mqtt 컨테이너가 종료되고 passwd 파일이 올바르게 암호화되지 않는다고 말합니다.

    그래서 mqtt 서버가 예상하기 전에 도커 컨테이너에서 encrypt 명령을 실행할 수 있습니까?

    답변

    1

    서비스를 시작하기 전에 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이 파일을 수정하기 때문에 이미 변환 된 파일을 변환하지 않도록해야합니다.

    좀 더 완벽한 솔루션을 구축하는 방법에 대한 아이디어를 얻으시기 바랍니다.

    +0

    매우 완벽한 답변을 해주셔서 감사합니다. 엔트리 포인트가 어떻게 사용되는지 결코 알 수 없습니다. –