將數據的初始化放到docker中的整個工作過程(問題記錄)


由於是打算作為個人博客,所以對於install這個步驟,我從一開始就打算刪掉的,前面一個多星期一直在修bug,到前天才開始做這個事情.
過程中也是碰到了各種問題,花了整整三天時間才完整的解決並實現了這個過程.

1.首先是思路的整理,如何去實現install過程的docker化.

由於原來是直接用的mysql5.7官方鏡像,所以mysql數據的導入就不好實現,因此需要在原官方鏡像的基礎上重新創建鏡像

實現方法及所需文件都在在mysql文件夾下.

2.數據導入與mysql權限問題.

設想是通過shell腳本來實現數據導入工作,用了好幾種方法都無法繞過mysql的認證步驟.

通過shell腳本對mysql進行操作時是無法實現輸入密碼,因此用了最不安全的方法,在啟動mysql鏡像時通過免密方式.

通過這種方式實現了數據導入.

3.mysql容器啟動問題.

由於是新建的Dockerfile,這一個問題也花費了大量時間,在容器啟動時一直報mysql未啟動的錯誤

因此setup腳本大概重寫了十多個版本,最終將此問題解決(詳見mysql/setup.sh文件)

4.設置mysql的root用戶密碼

由於需要實現數據導入,因此mysql權限設置為免密方式,但是這種方式不安全,因此想要解決掉此問題,重新設置root用戶密碼.

這一過程就不細講了,嘗試了各種方法,最終沒有實現,由於浪費時間過多,因此放棄這一方案.(也許可以實現,但不想再去嘗試了)

5.針對免密方式的補充

由於花費了太多時間在root用戶的設置上,但是最終無法實現,因此選擇了另外一種方案.

用戶問題的方案是,新增tale數據庫的管理用戶並授權.(詳見mysql/editpassword.sql文件)

安全問題是修改了docker-compose文件,不再將mysql容器端口暴露在宿主機中(平常測試時最好還是暴露端口,上線時刪除即可).

6.mysql遠程登錄問題

其實改到第5步的時候,感覺功能已經差不多完成了,在聯合啟動時,又報了數據源無法連接的問題,原因就是容器中mysql未開啟遠程連接.

再次修改啟動腳本.

7.blog容器無法連接連接mysql容器

本以為第6步中已經將連接問題解決,但是啟動blog時還是報了同樣的錯誤,通過本地客戶端進行連接是正常的,證明了遠程連接是沒問題的.多次重復這一過程,發現還是無法連接.修改了各種參數,也進入到blog容器中查看host文件是否正常,都沒有發現問題,也就是說配置都是正常的,但是每次報錯都是同樣的錯,最后發現問題的原因出在初始化的時間差上,blog容器啟動依賴mysql容器,mysql容器啟動成功之后,才會執行blog容器啟動,這一過程並沒有問題,問題在mysql容器中還有一步初始化過程,可參考setup.sh腳本,這一過程需要時間,如果blog容器在這個過程中啟動的話,由於權限問題還沒有處理完成,因此無法連接mysql容器.因此修改了blog鏡像的Dockerfile文件,並重寫啟動方法,將啟動過程延遲執行,最終解決了這個問題(詳見docker/startup.sh文件).

8.總結

問題解決了固然開心,但是也不能忘記了處理問題的過程帶給自己的成長.當然,過程中也有一些非技術的失誤,比如目錄設置錯誤,鏡像選擇問題, 這些都是粗心導致的,過程中也花費了大量的時間,因為網上關於docker的資料實在有些少,只能自己去鼓搗,所以也是很心累,焦躁和煩悶導致了各種粗心,以后需注意.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM