docker+ssh+webservice
在項目中需要動彈發布webservice,程式是部署在docker中的tomcat裡的,這個時候需要在系統啟動時發布webservice,webservice綁定的IP地址仍然是宿主主機的IP地址,發現系統啟動時webserivce總是發布不成功,總是報類似於這個異常:Could not start Jetty server on port 9,000: Cannot assign requested address。百思不得其解,思維方向也走偏了,總以為是哪裡設定不對,導致docker容器已經提前佔好要要發布的連接埠(因為在Dockerfile檔案中已經EXPOSE這個連接埠了),結果陸陸續續折騰了幾天,先後把docker這裡相關的知識試了個遍,結果還是毫無進展,到網上也找不到答案。
直到昨晚臨睡前,腦子中想了下docker的原理和結構圖,忽然間想到docker的本質原理就是“映射”,docker容器的IP地址和連接埠和宿主主機也是一一映射的,而程式是部署的tocmat運行在docker容器中,所以其中如果運行程式當然不能是宿主主機的地址了,而應該站在容器的角度去考慮,是容器主機的地址,把具體翻譯和映射的工作交給docker。而不是直接綁定宿主主機的IP,那麼綁定什麼地址呢?我想到了tomcat中的應用本身是正常的,tomcat可以正常訪問,那我就直接模仿tomcat就行了,於是使用docker port命令查了下tomcat,得到的結果是綁定在”0.0.0.0“這個IP上,而這個IP的意思是本機(本容器)的所有IP,關於”0,0.0.0"的知識讀者可以自己查更多的其他資料。於是趕緊試了下,果然成功了!
問題解決了,有點小高興,但是也看出自己處理問題過程中的方法和思路問題很大。在遇到問題時,沒有冷靜一個點一個點去分析,而是東拉西扯亂打一氣,浪費了很多時間,對不起給我付薪水的東家啊!其實處理問題時,我也預感到這個一定是個低級問題,果然如此。以後必須這樣嚴格要求自己了,如果遇到這種問題,一定要冷靜分析。