如何解決docker commit后鏡像越來越大問題
解決docker commit后鏡像越來越大問題
在一些情況下,需要將容器直接打包為鏡像。不想在Dockerfile中編寫一行行代碼。
但是使用:
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的鏡像名:Tag
會導(dǎo)致鏡像越來越大。10G的鏡像經(jīng)過4次commit就變成100G。
我們可以通過:docker system df -v,在【Containers space usage:】中查看容器的大小
雖然顯示只有10G,但是commit后會非常大。
所以在此找到2種方法:
方法1
直接打包容器,然后import為鏡像img1
docker export -o img.tar 容器ID docker import img.tar img1:20221011123412
方法2
將容器內(nèi)根目錄所有文件壓縮。傳到容器外,再import為鏡像img1
# 第一步:壓縮 sudo tar --exclude=./proc --exclude=./sys --exclude=./img.tar -cvf img.tar ./ 第二步:傳出容器 docker cp 容器ID:img.tar ./ 第三步:import為鏡像 cat img.tar | sudo docker import - img:202201010101
注意壓縮時會提醒權(quán)限問題【tar: Exiting with failure status due to previous errors】,導(dǎo)致壓縮報錯。
原因是:
- proc 、sys的部分文件是沒有權(quán)限的。而tar --exclude=./proc 雖然是跳過proc,但是注意絕對/相對路徑文件。
- 否則還是壓縮/proc,還會報錯。
綜上對比,還是方法1比較好用。不要再用方法2了。
總結(jié)的圖:

不過使用上邊打好的鏡像,在本機ocker run運行OK,在其他設(shè)備就報錯:
docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:385: applying cgroup configuration for process caused: Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms): unknown.
有文章說是設(shè)備內(nèi)存不足。。。。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker鏡像修改hosts及dockerfile修改hosts文件的實現(xiàn)方式
這篇文章主要介紹了Docker鏡像修改hosts及dockerfile修改hosts文件的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
Docker部署SQL?Server及最佳應(yīng)用小結(jié)
SQL?Server是由Microsoft開發(fā)和推廣的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS),本文總結(jié)了容器環(huán)境下的部署及實踐應(yīng)用,需要的朋友可以參考下2022-08-08
SpringCloud基于Docker和Docker-Compose的項目部署過程
本文介紹了如何卸載舊版本Docker、更新系統(tǒng)、安裝Docker及其依賴,并設(shè)置國內(nèi)鏡像源以加快下載速度,詳細說明了如何安裝Docker Compose、配置鏡像加速器,并展示了如何使用Docker Compose部署SpringCloud項目,提供了更新和重啟容器的方法2024-10-10
在docker容器中elasticsearch的導(dǎo)入導(dǎo)出方式
文章詳細介紹了如何使用Docker拉取Elasticsearch鏡像,并導(dǎo)出和導(dǎo)入索引數(shù)據(jù),還討論了在Elasticsearch?Head中解決請求頭顯示不正確的問題,包括從容器中復(fù)制文件、編輯文件和將文件回傳到容器2025-11-11

