docker run啟動(dòng)的容器掛掉了數(shù)據(jù)怎么辦
情景描述
在某個(gè)系統(tǒng)中,功能性的服務(wù)使用 docker stack deploy xxx 啟動(dòng),某個(gè)國(guó)產(chǎn)數(shù)據(jù)庫(kù)的服務(wù)單獨(dú)使用 docker run xxx 啟動(dòng),數(shù)據(jù)庫(kù)服務(wù)沒(méi)有將存儲(chǔ)的位置掛載出來(lái);
結(jié)果客戶重啟了服務(wù)器…再登錄到服務(wù)器重啟服務(wù)的時(shí)候,發(fā)現(xiàn)了一個(gè)問(wèn)題,之前數(shù)據(jù)庫(kù)里的數(shù)據(jù)可能會(huì)消失(如果再使用 docker run 啟動(dòng)的話)。
解決辦法
嘗試1
起初想的是數(shù)據(jù)肯定丟了,那就只能重新折騰一次數(shù)據(jù)了,但工作量太大了…
不過(guò)也沒(méi)辦法,下次再啟動(dòng),把存儲(chǔ)掛載到硬盤就好了,Orz
不過(guò)和同事交流了之后,發(fā)現(xiàn)了一個(gè)更為簡(jiǎn)單(但也不是永久的辦法),見(jiàn)嘗試2
嘗試2
同事提到,可以使用 docker start container_name 再次將容器啟動(dòng),這樣的話數(shù)據(jù)還在。后面嘗試了一下,果然數(shù)據(jù)還在……雖然也只是個(gè)臨時(shí)的解決辦法
后面想了一下,docker啟動(dòng)的鏡像,如果不將數(shù)據(jù)映射出來(lái)的話,會(huì)存儲(chǔ)在默認(rèn)的volume;即使用docker restart xxx重啟容器,那變動(dòng)的數(shù)據(jù)也還是在的;也就是說(shuō)在這個(gè)地方,服務(wù)器重啟了,容器掛掉了(使用docker ps查看,其容器狀態(tài)是Exited),但其實(shí)之前的數(shù)據(jù)還會(huì)在默認(rèn)的volume下,只有刪除掉容器的時(shí)候,變動(dòng)的數(shù)據(jù)才會(huì)丟失。
驗(yàn)證測(cè)試
隨便打包一個(gè)鏡像,啟動(dòng)容器,創(chuàng)建一個(gè)文件,再停止,再啟動(dòng),查看文件是否存在
# 啟動(dò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 # 進(jìn)容器增加文件 ➜ 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 # 進(jìn)去查看文件是否存在 ➜ 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 依然存在;此時(shí)如果停掉容器,使用docker rm刪掉容器,再重新啟動(dòng)一個(gè)同名容器,可以看到,容器內(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 # 啟動(dòng)新的同名容器 ➜ docker_start_test docker run -itd --name docker_run_test 4cbf48630b46 ping 127.0.0.1 99a6f5df0a86e4c07abf184e322a23e4fbec89ff354691459cdac8fcd8687ba3 # 進(jìn)入容器驗(yàn)證 ➜ 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的說(shuō)明
從官網(wǎng)看到,start命令的作用是:
Start one or more stopped containers
emmm,挺直白,沒(méi)什么可說(shuō)的
PS
其實(shí)最好的辦法,就是將容器的存儲(chǔ)目錄掛載出來(lái)…另外,一般來(lái)講似乎數(shù)據(jù)庫(kù)服務(wù)不應(yīng)該使用容器啟動(dòng)
總結(jié)
以上所述是小編給大家介紹的docker run啟動(dòng)的容器掛掉了數(shù)據(jù)怎么辦,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
win7下docker安裝與報(bào)錯(cuò)問(wèn)題的解決方法
這篇文章主要為大家詳細(xì)介紹了win7下docker安裝與報(bào)錯(cuò)問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
docker compose安裝es+kibana 8.12.2的詳細(xì)過(guò)程
因云平臺(tái)需要改造,es7升級(jí)為es8,所以記錄一下,es8需要開(kāi)啟ssl認(rèn)證,需要配置證書(shū),全本帶你用docker安裝,便于后面es8的學(xué)習(xí),這篇文章主要介紹了docker compose安裝es+kibana 8.12.2的詳細(xì)過(guò)程,感興趣的朋友跟隨小編一起看看吧2024-05-05
關(guān)于docker?cgroups資源限制的問(wèn)題
cgroups是一個(gè)非常強(qiáng)大的linux內(nèi)核工具,他不僅可以限制被namespace隔離起來(lái)的資源,還可以為資源設(shè)置權(quán)重、計(jì)算使用量,這篇文章主要介紹了docker?cgroups資源限制,需要的朋友可以參考下2022-09-09
對(duì)docker中的overlay式網(wǎng)絡(luò)詳解
這篇文章主要介紹了對(duì)docker中的overlay式網(wǎng)絡(luò)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Docker NFS volume創(chuàng)建與使用方式
這篇文章主要介紹了Docker NFS volume創(chuàng)建與使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
詳解Docker下搭建Jenkins構(gòu)建環(huán)境
這篇文章主要介紹了詳解Docker下搭建Jenkins構(gòu)建環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
使用Docker Compose創(chuàng)建LAMP環(huán)境的詳細(xì)步驟
現(xiàn)如今,通過(guò) Docker 容器化部署環(huán)境已經(jīng)逐漸成為主流,特別是在部署像 LAMP 這樣的復(fù)雜環(huán)境時(shí),本教程旨在帶您完成使用 Docker-Compose 建立 LAMP 環(huán)境的整個(gè)過(guò)程,同時(shí)還包括定制 PHP 環(huán)境的步驟,需要的朋友可以參考下2024-12-12
使用Docker和Nginx部署Web服務(wù)的操作指南
本文給大家介紹了Docker和Nginx部署Web服務(wù)的完美指南,Docker是一種容器化技術(shù),它可以將應(yīng)用程序及其依賴項(xiàng)打包到一個(gè)獨(dú)立的、可移植的容器中,而Nginx則是一款高性能的Web服務(wù)器和反向代理服務(wù)器,感興趣的朋友可以參考下2024-01-01

