調試Dcoker容器
>原文 http://dockone.io/article/367
【編者的話】本講述了Cloud66在解決容器無法啟動時的兩種解決方案,對于沒有自動調試技術的我們,優先推薦手動調試方案。
這短暫幾個月,看到大家都在生產環境下用Docker是一件令人激動人心的事。為我們的客戶工作,并幫助他們搭建并運行,有時是富有挑戰并令人滿足的,我喜歡寫下這些普通的事情,當我們開始在線上使用Docker時。起初,富有挑戰,但是你不久就會知道這個令人吃驚的技術的好處。
如何在本地讓它工作?
容器最大的好處就是它是靜態的,因此你可以最終部署出一致性的環境。如果你有些事務需要使用指定的鏡像,第一步是嘗試本地運行。在生產環境運行docker是非常簡單的,同時也是很容易排除故障的。
如果可以本地構建鏡像,你需要開啟你的容器通過命令docker run -it <image_name>:<tag> <command>。使用的命令將指定服務運行容器,任何輸出將讓你有權限跟蹤將發生什么問題。
Cloud66是怎樣讓它工作?
這里的第一步是檢查,是否你已經通過開始命令(start command)提供的服務來啟動容器,該開始命令可以是在Dockerfile中也可以是在服務配置項中。如果已經隱藏了這些,那么有些步驟用于解決這個問題。
自動調試(live)
使用Cloud 66 toolbelt來運行你的容器:
cx run -s <stack_name> --server <server_name> --service <service_name>
這個命令將根據帶有裝載有效環境變量或者設置網絡或者DNS的鏡像,啟動一個新的容器,并附加(attach)進容器。你將可能看到任何錯誤的消息,從啟動開始,這將幫助你解決問題。
你可以隨意添加 /bin/bash到命令末尾,以此來開啟Bash腳本在容器中。這將幫助你調試容器在里邊。這些命令可能提供給你復制或者粘貼,如果你訪問你的 Stack page -> Docker server -> Server name -> View running containers (通過右鍵)。
手動調試(retrospective)
1、為你的服務器開啟SSH功能。
2、我們自動輸出開啟容器過程中產生的日志到文件/var/log/containers中,這些文件被命名如下: <service>_start_errors.log。這些日志文件將容納任何通過開始命令產生的輸出,這將是一個理解你容器為什么沒有啟動起來的好的主意。
3、檢查任何運行容器通過docker ps 如果容器沒有運行在這里,可能有些事物阻止了其啟動。
4、在這時,我們可以運行docker ps -a檢查來的老的容器啟動失敗。注意最后一次部署的容器ID,我們將需要它在接下來的步驟中。
5、現在讓我們檢查失敗容器的日志,通過運行docker log <container-id>,將輸出為什么容器不能啟動的所有錯誤信息。
總體來說,你將面對許多事務,可能被其它人帶得有經驗。一個快速的google錯誤信息搜索將讓你朝著正確的方向,如果你困惑的時候會感受到達到我們的目標是容易的。
原文鏈接: Debugging Docker containers (翻譯:劉紅)
===========================
譯者介紹
劉紅,目前工作于成都一家虛擬現實公司,公司已經部署Docker線上環境,如果樂意大家多多溝通Docker技術。