👉 cd
👉 [ -d mosquitto_config ] || mkdir mosquitto_config
👉 cd mosquitto_config
👉 cat > mosquitto.conf << 'myEOF'
allow_anonymous true
listener 1883 0.0.0.0
myEOF
👉 cd
👉 docker run -d --restart unless-stopped -p 11883:1883 -v ~/mosquitto_config/mosquitto.conf:/mosquitto/config/mosquitto.conf -v ~/mosquitto_config/log:/mosquitto/log eclipse-mosquitto:2.0.14
#訂閱主題為myTopic
👉 mosquitto_sub -t 'myTopic'
或
👉 mosquitto_sub -t '#'
開新終端機
👉 mosquitto_pub -t 'myTopic' -m 發布測試
👉 cd
👉 [ -d mosquitto_config ] || mkdir mosquitto_config
👉 cd mosquitto_config
這三行命令用於在當前路徑下檢查並創建目錄,然後進入目錄。以下是每個命令的詳細解釋及用意:
cd
這個命令沒有指定路徑,所以它會將當前終端切換到使用者的主目錄(通常是 /home/username)。這是預設的行為,如果你輸入 cd 並按下 Enter,你會進入使用者的主目錄。
[ -d mosquitto_config ] || mkdir mosquitto_config
這是一個檢查並創建目錄的命令。它的作用是:
檢查目錄是否存在:[ -d mosquitto_config ] 會檢查當前路徑下是否存在名為 mosquitto_config 的目錄。
-d 是用來判斷一個目錄是否存在的條件判斷符號。
如果目錄存在,這個條件會返回 true。
創建目錄(如果不存在):|| 表示「或」的邏輯操作符。
如果前面的條件 [ -d mosquitto_config ] 返回 false(即目錄不存在),則執行 mkdir mosquitto_config 命令來創建名為 mosquitto_config 的目錄。
如果目錄已經存在,則不會執行 mkdir,因此可以避免重複創建目錄。
這行命令的作用是:如果目錄 mosquitto_config 不存在,則創建它。
cd mosquitto_config
這行命令的作用是將當前工作目錄切換到 mosquitto_config 目錄中。
這三行命令的整體作用是:
將當前工作目錄切換到使用者主目錄。
檢查當前工作目錄下是否存在 mosquitto_config 目錄,如果不存在則創建它。
進入 mosquitto_config 目錄。
這種用法通常出現在腳本或指南中,用來確保當前目錄中有一個指定的配置目錄(如 mosquitto_config),並且切換到該目錄中,方便接下來的操作(如配置文件管理、存放 Mosquitto 配置等)。
cat >
mosquitto.conf << 'myEOF'
allow_anonymous true listener 1883 0.0.0.0
myEOF
這段命令的作用是將配置內容寫入到名為 mosquitto.conf 的文件中。以下是每個部分的詳細解釋及其作用:
cat > mosquitto.conf << 'myEOF'
allow_anonymous true
listener 1883 0.0.0.0
myEOF
cat > mosquitto.conf << 'myEOF':
cat > mosquitto.conf:表示將標準輸入(stdin)中的內容重定向並寫入到 mosquitto.conf 文件中。這將會覆蓋原有的 mosquitto.conf 文件內容。
<< 'myEOF':這是一個稱為「Here Document」的語法,用來標識多行輸入的結束。myEOF 是自定義的標識符,表示輸入的結束標誌。
簡單來說,這行命令表示將 myEOF 與 myEOF 之間的所有內容寫入 mosquitto.conf 文件。
allow_anonymous true:
這行配置允許匿名客戶端連接到 Mosquitto Broker。也就是說,客戶端不需要提供用戶名和密碼即可連接到 Broker。
這對於測試和內部網路環境可能很有用,但在公開網路上使用時需要注意安全風險。
listener 1883 0.0.0.0:
listener 1883:這行配置指定 Mosquitto Broker 監聽 1883 端口。1883 是 MQTT 的默認端口。
0.0.0.0:表示 Broker 將監聽所有可用的網路接口。這意味著無論客戶端從哪個 IP 地址連接,只要它能到達這個機器,並且使用了正確的端口(1883),就可以連接到 Broker。
這個配置允許來自任何網絡的客戶端連接到該 Broker,因此在公開網路上使用時需要特別注意安全問題。
myEOF:
myEOF 是結束標識符,表示多行輸入的結束。這個標識符是可以自定義的,只要在命令的開始和結束保持一致即可。
當命令讀取到這個標識符時,會停止讀取輸入並寫入文件。
當你執行這個命令時,Shell 會將 myEOF 和 myEOF 之間的文本寫入到 mosquitto.conf 文件中。
最終 mosquitto.conf 文件的內容將會是:
yaml
複製程式碼
allow_anonymous true
listener 1883 0.0.0.0
這個文件會用來配置 Mosquitto Broker,使其允許匿名連接並監聽所有網路接口上的 1883 端口。
安全性問題:允許匿名連接 (allow_anonymous true) 並監聽所有接口 (0.0.0.0) 可能會帶來安全風險,建議在生產環境中謹慎使用,並考慮設置認證和授權機制。
<< 'myEOF' 的用法:這種方式可以用來編寫多行內容到文件中,避免使用多次 echo 命令。
docker run -d --restart unless-stopped -p 11883:1883 -v
~/mosquitto_config/mosquitto.conf:/mosquitto/config/mosquitto.conf -v ~/mosquitto_config/log:/mosquitto/log eclipse-mosquitto:2.0.14
這條命令用於在 Docker 容器中運行 Mosquitto MQTT Broker,並設置了一些參數來控制容器的啟動行為、端口映射和配置文件的掛載。以下是每個參數的詳細解釋及其作用:
bash
複製程式碼
docker run -d --restart unless-stopped -p 11883:1883 -v ~/mosquitto_config/mosquitto.conf:/mosquitto/config/mosquitto.conf -v ~/mosquitto_config/log:/mosquitto/log eclipse-mosquitto:2.0.14
docker run -d:
docker run:運行一個新的 Docker 容器。
-d:表示以「分離模式」(detached mode)運行容器。這樣容器會在後台運行,而不會佔用當前終端。
--restart unless-stopped:
設置容器的重啟策略。該策略的含義是:
當容器因為非手動操作(例如系統重啟或容器崩潰)而停止時,Docker 會自動重啟該容器。
如果容器是手動停止的(例如通過 docker stop),則不會重啟容器。
這個選項非常適合需要長時間穩定運行的服務,例如 MQTT Broker。
-p 11883:1883:
將主機的 11883 端口映射到容器內的 1883 端口。
1883 是 MQTT 的默認端口。這意味著,你可以通過主機的 11883 端口來訪問容器內的 Mosquitto Broker。
這樣做的目的是避免主機上 1883 端口被其他服務佔用或衝突。
-v ~/mosquitto_config/mosquitto.conf:/mosquitto/config/mosquitto.conf:
將主機上的 ~/mosquitto_config/mosquitto.conf 文件掛載到容器內的 /mosquitto/config/mosquitto.conf 位置。
-v 是用來指定 Docker 的「卷」掛載(volume),可以將主機上的文件或目錄映射到容器內的文件系統中。
這樣做的目的是使你可以在主機上修改 mosquitto.conf 配置文件,而不需要進入容器內部。修改後重新啟動容器即可應用新的配置。
-v ~/mosquitto_config/log:/mosquitto/log:
將主機上的 ~/mosquitto_config/log 目錄掛載到容器內的 /mosquitto/log 目錄中。
這樣做可以將 Mosquitto 生成的日誌文件保存在主機上,以便於查看和分析。
同樣,這樣可以避免進入容器內部來查看日誌,便於調試和運維。
eclipse-mosquitto:2.0.14:
指定要運行的 Docker 映像,這裡是 eclipse-mosquitto 版本 2.0.14。
eclipse-mosquitto 是 Mosquitto 的官方 Docker 映像名稱,包含了 Mosquitto Broker 的所有必要文件和環境。
這條命令會執行以下操作:
在 Docker 容器中啟動 eclipse-mosquitto:2.0.14 版本的 Mosquitto Broker。
將主機的 11883 端口映射到容器內的 1883 端口。
將主機上的 mosquitto.conf 配置文件掛載到容器中,便於靈活修改配置。
將主機上的 log 目錄掛載到容器中,以便於保存和查看 Mosquitto 的日誌文件。
使用 --restart unless-stopped 確保容器在非手動停止的情況下自動重啟,提升穩定性。
這樣的設置非常適合在開發環境或生產環境中使用,因為它提供了靈活的配置管理、穩定的自動重啟機制以及便捷的日誌管理方式。
如果你不需要保存 Mosquitto 的日誌,可以通過以下方式來禁用日誌輸出或不掛載日誌目錄。以下是幾種可行的方法:
你可以修改 mosquitto.conf 配置文件,來禁用或減少日誌輸出。只需設置 log_type 為最低限度的輸出或完全禁用。
打開 mosquitto.conf 文件,添加或修改以下行:
log_type none
這樣會禁用所有類型的日誌輸出。
保存文件,然後啟動或重啟容器。
修改後的 docker run 命令保持不變:
docker run -d --restart unless-stopped -p 11883:1883 -v ~/mosquitto_config/mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto:2.0.14
如果你不需要將日誌保存到主機上,可以刪除掛載日誌目錄的 -v 參數:
刪除 -v ~/mosquitto_config/log:/mosquitto/log 這一部分。
修改後的 docker run 命令如下:
docker run -d --restart unless-stopped -p 11883:1883 -v ~/mosquitto_config/mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto:2.0.14
這樣做的效果是 Mosquitto 仍然會在容器內部記錄日誌,但日誌不會保存在主機上,也不會持久化(容器重啟後日誌會丟失)。
你也可以在 mosquitto.conf 中將日誌輸出重定向到 /dev/null,這樣就不會實際產生日誌文件:
修改 mosquitto.conf 文件,設置日誌輸出為 /dev/null:
log_dest file /dev/null
保存並啟動或重啟容器。
這樣 Mosquitto 的所有日誌輸出都會被丟棄。
你也可以通過 Docker 的 --log-driver 選項來禁用容器的日誌輸出:
在 docker run 命令中添加 --log-driver none 選項:
docker run -d --restart unless-stopped --log-driver none -p 11883:1883 -v ~/mosquitto_config/mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto:2.0.14
這樣做的效果是 Docker 本身不會記錄容器的日誌(不影響 Mosquitto 自身的日誌輸出)。
方法 1:修改 mosquitto.conf 設置 log_type none 可以禁用所有 Mosquitto 日誌輸出。
方法 2:不掛載日誌目錄 可以防止日誌保存到主機上。
方法 3:將日誌重定向到 /dev/null 使日誌無法保存。
方法 4:使用 Docker 的 --log-driver none 禁用 Docker 容器日誌記錄。
你可以根據需要選擇合適的方法來禁用日誌。