情景描述
創(chuàng)新互聯(lián)是一家以網(wǎng)站設(shè)計建設(shè),成都小程序開發(fā)、網(wǎng)站開發(fā)設(shè)計,網(wǎng)絡(luò)軟件產(chǎn)品開發(fā),企業(yè)互聯(lián)網(wǎng)推廣服務(wù)為主的民營科技公司。主要業(yè)務(wù)涵蓋:為客戶提供網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站開發(fā)、國際域名空間、網(wǎng)站優(yōu)化排名、買鏈接等服務(wù)領(lǐng)域。憑借建站老客戶口碑做市場,建設(shè)網(wǎng)站時,根據(jù)市場搜索規(guī)律和搜索引擎的排名收錄規(guī)律編程,全力為建站客戶設(shè)計制作排名好的網(wǎng)站,深受老客戶認可和贊譽。
在某個系統(tǒng)中,功能性的服務(wù)使用 docker stack deploy xxx
啟動,某個國產(chǎn)數(shù)據(jù)庫的服務(wù)單獨使用 docker run xxx
啟動,數(shù)據(jù)庫服務(wù)沒有將存儲的位置掛載出來;
結(jié)果客戶重啟了服務(wù)器…再登錄到服務(wù)器重啟服務(wù)的時候,發(fā)現(xiàn)了一個問題,之前數(shù)據(jù)庫里的數(shù)據(jù)可能會消失(如果再使用 docker run 啟動的話)。
解決辦法
嘗試1
起初想的是數(shù)據(jù)肯定丟了,那就只能重新折騰一次數(shù)據(jù)了,但工作量太大了…
不過也沒辦法,下次再啟動,把存儲掛載到硬盤就好了,Orz
不過和同事交流了之后,發(fā)現(xiàn)了一個更為簡單(但也不是永久的辦法),見嘗試2
嘗試2
同事提到,可以使用 docker start container_name
再次將容器啟動,這樣的話數(shù)據(jù)還在。后面嘗試了一下,果然數(shù)據(jù)還在……雖然也只是個臨時的解決辦法
后面想了一下,docker啟動的鏡像,如果不將數(shù)據(jù)映射出來的話,會存儲在默認的volume;即使用docker restart xxx重啟容器,那變動的數(shù)據(jù)也還是在的;也就是說在這個地方,服務(wù)器重啟了,容器掛掉了(使用docker ps查看,其容器狀態(tài)是Exited),但其實之前的數(shù)據(jù)還會在默認的volume下,只有刪除掉容器的時候,變動的數(shù)據(jù)才會丟失。
驗證測試
隨便打包一個鏡像,啟動容器,創(chuàng)建一個文件,再停止,再啟動,查看文件是否存在
# 啟動容器 ➜ docker_start_test docker run -itd --name docker_run_test 4cbf48630b46 ping 127.0.0.1 d6278f537113122d4ccbe00950790750215c5a09002bcbd1ef6f9e660fc9eaac ➜ docker_start_test docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d6278f537113 4cbf48630b46 "ping 127.0.0.1" 3 seconds ago Up 2 seconds docker_run_test # 進容器增加文件 ➜ docker_start_test docker exec -it docker_run_test /bin/sh sh-4.2# pwd / sh-4.2# touch test sh-4.2# exit exit # 重啟容器 ➜ docker_start_test docker stop docker_run_test docker_run_test ➜ docker_start_test docker ps -a | grep docker_run_test d6278f537113 4cbf48630b46 "ping 127.0.0.1" About a minute ago Exited (137) 12 seconds ago docker_run_test # 進去查看文件是否存在 ➜ docker_start_test docker start docker_run_test docker_run_test ➜ docker_start_test docker exec -ti docker_run_test /bin/sh sh-4.2# ls anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys test tmp usr var
可以看到,文件 test 依然存在;此時如果停掉容器,使用docker rm刪掉容器,再重新啟動一個同名容器,可以看到,容器內(nèi)不再有test文件了
# stop / rm掉容器 ➜ docker_start_test docker stop docker_run_test docker_run_test ➜ docker_start_test docker ps -a | grep docker_run d6278f537113 4cbf48630b46 "ping 127.0.0.1" 7 minutes ago Exited (137) 13 seconds ago docker_run_test ➜ docker_start_test docker rm d6278f537113 d6278f537113 # 啟動新的同名容器 ➜ docker_start_test docker run -itd --name docker_run_test 4cbf48630b46 ping 127.0.0.1 99a6f5df0a86e4c07abf184e322a23e4fbec89ff354691459cdac8fcd8687ba3 # 進入容器驗證 ➜ docker_start_test docker exec -ti docker_run_test /bin/sh sh-4.2# ls anaconda-post.log bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var sh-4.2# ls test ls: cannot access test: No such file or directory
docker run的說明
從官網(wǎng)看到,start命令的作用是:
Start one or more stopped containers
emmm,挺直白,沒什么可說的
PS
其實最好的辦法,就是將容器的存儲目錄掛載出來…另外,一般來講似乎數(shù)據(jù)庫服務(wù)不應(yīng)該使用容器啟動
總結(jié)
以上所述是小編給大家介紹的docker run啟動的容器掛掉了數(shù)據(jù)怎么辦,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
網(wǎng)站欄目:dockerrun啟動的容器掛掉了數(shù)據(jù)怎么辦
本文鏈接:http://redsoil1982.com.cn/article18/pogegp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、用戶體驗、響應(yīng)式網(wǎng)站、網(wǎng)站營銷、移動網(wǎng)站建設(shè)、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)