目錄
- docker容器狀態(tài)出現(xiàn)Exit(1)
- 修改exit狀態(tài)的docker容器
- Linux 系統(tǒng)運(yùn)行基礎(chǔ)
- OverlayFS 存儲(chǔ)原理
- 修改exit狀態(tài)的docker容器
- 總結(jié)
docker容器狀態(tài)出現(xiàn)Exit(1)
今天docker一個(gè)容器出現(xiàn)狀態(tài)為Exited(1),為了讓它運(yùn)行起來(lái),我把它重啟restart或刪掉重新運(yùn)行,結(jié)果還是出現(xiàn)這個(gè)Exited(1)的問(wèn)題。
后來(lái)查找各種資料,倒騰了好久,才解決掉這個(gè)問(wèn)題?
- docker stop 容器名
- docker rm 容器名
- 最主要的是,在刪除完容器后,還要手動(dòng)將本地的關(guān)于容器的配置目錄給刪掉。比如我上面這個(gè)容器的配置文件就在/var/fdfs下。執(zhí)行命令sudo rm -rf storage。
- 然后再重新由鏡像啟動(dòng)這個(gè)容器就可以了。
修改exit狀態(tài)的docker容器
Linux 系統(tǒng)運(yùn)行基礎(chǔ)
1.boot file system ( bootfs )
包含 Boot Loader與Kernel文件,用戶不能修改這些文件。并且在系統(tǒng)啟動(dòng)過(guò)程完成之后, 整個(gè)系統(tǒng)的內(nèi)核都會(huì)被加載進(jìn)內(nèi)存。此時(shí)bootfs會(huì)被卸載, 從而釋放出所占用的系統(tǒng)內(nèi)存。
在容器中可以運(yùn)行不同版本的Linux, 說(shuō)明對(duì)于同樣內(nèi)核版本的不同的 Linux 發(fā)行版的 bootfs 都是一致的, 否則會(huì)無(wú)法啟動(dòng)。因此可以推斷, Docker運(yùn)行是需要內(nèi)核支持的。
Linux系統(tǒng)中典型的bootfs目錄: (核心) /boot/vmlinuz、(核心解壓縮所需 RAM Disk) /boot/initramfs
2.root file system ( rootfs )
1) 不同的Linux發(fā)行版本, bootfs相同, rootfs不同(二進(jìn)制文件)。
2) 每個(gè)容器有自己的 rootfs, 它來(lái)自不同的 Linux 發(fā)行版的基礎(chǔ)鏡像,包括 Ubuntu, Debian 和 SUSE 等。
3) 使用不同的rootfs 就決定了, 在構(gòu)建鏡像的過(guò)程中, 可以使用哪些系統(tǒng)的命令。
4) 典型的rootfs 目錄: /dev、/proc、/bin、/etc、 /lib、/usr
OverlayFS 存儲(chǔ)原理
OverlayFS 結(jié)構(gòu)分為三個(gè)層: LowerDir、Upperdir、MergedDir
1.LowerDir (只讀)
只讀的 image layer,其實(shí)就是 rootfs, 在使用 Dockfile 構(gòu)建鏡像的時(shí)候就定好了
2.Upperdir (讀寫(xiě))
upperdir 則是在 lowerdir 之上的一層, 為讀寫(xiě)層。容器在啟動(dòng)的時(shí)候會(huì)創(chuàng)建, 所有對(duì)容 器的修改, 都是在這層。比如容器啟動(dòng)寫(xiě)入的日志文件,或者是應(yīng)用程序?qū)懭氲呐R時(shí)文件
3.MergedDir (展示)
merged 目錄是容器的掛載點(diǎn),在用戶視角能夠看到的所有文件
修改exit狀態(tài)的docker容器
查看容器狀態(tài) sudo docker ps -a
,可以看到當(dāng)前容器是關(guān)閉的
查看容器日志,查找關(guān)閉原因
sudo docker logs <容器名 或 容器ID>
獲取容器文件存儲(chǔ)的路徑
sudo docker inspect <容器名或容器ID> | grep -A 10 GraphDriver-A
表示在搜索到該關(guān)鍵詞后,打印下面 n 行
mergedDir 是不存在的,我們需要修改的文件都存儲(chǔ)在 UpperDir 目錄下
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持。