2017-10-14 4 views
0

最終的にDockerでmqttを実行しましたが、uid/pwdを使用します。 MQTTの画像3からDockerCompose.yaml経由MQTTサービスを発射passwdファイルを要求しませんmosquitto.confファイルを使用してドッカーのmqttサーバー - DockerCompose.yamlから<mosquitto_passwd -U>を実行する方法

  1. 第一、
  2. ている:で、作業それのすべてを手に入れました
  3. docker exec -it containerid sh
  4. でサービスにログインしています。サービスでは、ファイル内にあるオープンパスワードを暗号化するためにコマンドmosquitto_passwd -U passwdfileを実行します。
  5. 次に、ドッカーサービスのスタックを停止し、パスワードファイルの場所を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

非常に完全な回答をいただきありがとうございます。私はエントリーポイントの使い方を決して理解していません。 –

関連する問題