如何通過從碼頭集裝箱運行命令來訪問主機?我需要訪問主機,以便我可以檢查泊塢窗容器和圖像的空間使用情況。通過碼頭集裝箱訪問主機
回答
這個問題基本上是「我怎樣才能從碼頭集裝箱的主機抓取數據」。
就像保羅所說,搬運工集裝箱意思是用於運行應用程序的獨立環境,從主機環境隔離。
與虛擬機類似,但更輕量。因此,容器並不意味着有能力直接向主機執行shell命令。
我想這是專爲安全起見,以及因爲你不希望惡意的集裝箱像格式化磁盤的主機上執行命令的邪惡。
回到問題。
從根本上說,這些都是非常標準的方式的容器可以訪問它的主機的數據;
- Unix域套接字
- 卷
- 網絡插座例如寧靜或Web服務
Unix域套接字:
這個想法是有充當服務器偵聽一個Unix domain socket
在主機上運行的進程。然後容器將有一個客戶端進程來請求服務器的資源。在這種情況下,資源可以是asking about diskspace
。
該方法要求*.sock
插座文件的文件路徑是在主機和容器,這可以通過使用docker volume
命令來實現之間可見。
優勢: 解決方案是可擴展的,你可以,一旦你已經建立了客戶端 - 服務器程序的請求增添別樣。
缺點 可能需要一點時間來構建應用程序。如果你問我,有點矯枉過正。
音量開到
您從主機到容器裝入filepath
。然後,您創建一個快速且髒的shell腳本,將df
的結果寫入文件並將其放置在共享目錄區域中。
然後在容器中,您將有另一個cron作業來運行一個程序/腳本不斷地parse
df
結果,並做任何你需要做的事情之後。
優勢:
還不如你不必寫的小程序來讀取和寫入輸出前一種方案一樣昂貴。
缺點: 可能是骯髒的或不可能的擴展這個解決方案,服務於不同類型的資源。例如。從主機的shell運行程序。
RESTFUL/Web服務的方式
非常非常相似unix domain socket
方法太多,但你跟HTTP這裏。您仍然以不同的方式編寫客戶端/服務器程序。然而,它比第一種策略更麻煩,因爲您需要額外的步驟來查找網絡接口的IP地址docker0
。這是爲了讓您知道容器如何連接到host
。
優點: 可擴展的。 您可以使用此程序來控制部署REST服務器的任何遠程主機。
缺點: 昂貴的發展。可能對你的用例超級過度。
結論
我可能只是去docker volume
方式。
有一個cron作業來運行一個簡單的shell腳本來運行df
,處理它的輸出,並且只需在文件中寫入「TRUE」或「FALSE」關鍵字。
然後,只需在容器中有另一個shell腳本,即cat
該文件,以確定是否在預期關鍵字時觸發某些其他腳本。
如果安裝在容器中的ssh客戶端和主機上的sshd服務器,您可以從容器ssh來執行命令的主機。爲了避免輸入密碼,例如自動運行腳本,使用ssh鍵。
據我所知,搬運工不提供從容器主機上下文中執行的命令的裝置。 docker的要點是包含容器,而不是讓它們在主機上執行命令。
相反更容易。您可以通過使用docker exec
輸入來自主機的容器上下文如果你想有它運行的任務來監控您的碼頭工人主機系統的使用,更多的容器,你應該看看https://prometheus.io/與https://github.com/prometheus/node_exporter。
節點出口容器從安裝在主機多克爾得到的procfs和sysfs中,並因此能夠向監控主機的指標。
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
是的,我同意這個解決方案。它與訪問主機通過安裝主機路徑相似。這是更直接的方式。 – Jared
- 1. 從碼頭集裝箱訪問主機數據庫
- 2. 碼頭集裝箱只能訪問互聯網--net =主機
- 3. 從碼頭集裝箱訪問主機zfs
- 4. 從碼頭集裝箱訪問本地主機
- 5. 如何讓碼頭集裝箱訪問主機網絡端口
- 6. Masstransit無法從碼頭集裝箱訪問主機RabbitMQ
- 7. 鏈接碼頭集裝箱與主機
- 8. 通過https在Azure子域上訪問碼頭集裝箱
- 9. 訪問Heroku上的碼頭集裝箱
- 10. 連接到碼頭集裝箱碼頭主機上的服務
- 11. 從碼頭集裝箱連接到主機上的碼頭0
- 12. 從碼頭集裝箱訪問Windows機器的文件
- 13. 爲什麼我不能通過主機捲起另一個碼頭集裝箱
- 14. 碼頭集裝箱未顯示卷安裝 - 訪問問題
- 15. 碼頭集裝箱之間的通信
- 16. 無法ping通碼頭集裝箱
- 17. 碼頭集裝箱之間的通信
- 18. 不能ping我的碼頭集裝箱外的主機
- 19. 從主機瀏覽器識別碼頭集裝箱
- 20. 碼頭集裝箱中的不同dns條目比主機
- 21. 主機端口與數據庫到碼頭集裝箱
- 22. 將主機端口轉發到碼頭集裝箱
- 23. 如何將文件從碼頭集裝箱共享到主機
- 24. 無法連接到Docker主機以外的碼頭集裝箱
- 25. 碼頭集裝箱不會從主機繼承ulimit
- 26. 更改主機系統中碼頭集裝箱的路徑
- 27. 從碼頭集裝箱到達主機的文件夾
- 28. 無法解析碼頭集裝箱之間的主機名
- 29. 檢查碼頭集裝箱FS從主機變化
你的問題是類似於這一個:https://stackoverflow.com/questions/32163955/how-to-run-shell-script-on-host-from-docker-container但接受的答案似乎是有缺陷的。 – Paul
感謝您的回答。我會檢查線程中提供的可能解決方案是否也適用於我的情況。 – Vaanz