Saya mencoba menghapus gambar dan saya mendapatkan:
# docker rmi f50f9524513f
Failed to remove image (f50f9524513f): Error response from daemon: conflict: unable to delete f50f9524513f (cannot be forced) - image has dependent child images
Ini adalah versi buruh pelabuhan:
# docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
Server:
Version: 1.10.3
API version: 1.22
Go version: go1.5.3
Git commit: 20f81dd
Built: Thu Mar 10 21:49:11 2016
OS/Arch: linux/amd64
tetapi tidak ada informasi tambahan:
# docker images --format="raw" | grep f50f9524513f -C3
repository: debian
tag: 8
image_id: f50f9524513f
created_at: 2016-03-01 18:51:14 +0000 UTC
virtual_size: 125.1 MB
repository: debian
tag: jessie
image_id: f50f9524513f
created_at: 2016-03-01 18:51:14 +0000 UTC
virtual_size: 125.1 MB
Bagaimana saya bisa mendapatkan gambar anak tanggungan yang diklaimnya?
tidak ada kontainer yang berjalan atau dihentikan dengan id gambar itu.
linux
docker
containers
nicocesar.dll
sumber
sumber
Jawaban:
Jawaban singkat: Ini adalah script python3 yang mencantumkan gambar buruh pelabuhan dependen.
Jawaban panjang: Anda dapat melihat id gambar dan id induk untuk semua gambar yang dibuat setelah gambar yang dimaksud dengan berikut ini:
Anda harus dapat mencari gambar dengan id induk yang dimulai dengan f50f9524513f, kemudian mencari gambar anak dari itu , dll .. Tapi
.Parent
bukan itu yang Anda pikirkan. , jadi dalam banyak kasus Anda perlu menentukan didocker images --all
atas untuk membuatnya berfungsi, lalu Anda akan mendapatkan id gambar untuk semua lapisan perantara juga.Berikut skrip python3 yang lebih terbatas untuk mengurai output buruh pelabuhan dan melakukan pencarian untuk menghasilkan daftar gambar:
Jika Anda menyimpan ini seperti
desc.py
Anda dapat menjalankannya sebagai berikut:Atau gunakan saja inti di atas , yang melakukan hal yang sama.
sumber
Jika Anda tidak memiliki banyak gambar, selalu ada pendekatan brute force:
sumber
echo $1
menjadi yang lebih jelek (tapi masih kasar)docker images | grep $i
(lebih portabel dalam versi buruh pelabuhan daripada menggunakan--filter
bendera untuk Id Gambar)Instal dockviz dan ikuti cabang dari image id di tree view:
sumber
sudo apt-get update ; sudo apt-get install golang-go; export GOPATH=$HOME/.go
dulu.brew install dockviz
Saya telah membuat inti dengan skrip shell untuk mencetak pohon turunan dari gambar buruh pelabuhan, jika ada yang tertarik dengan solusi bash:
sumber
Inilah yang saya lakukan untuk melestarikan "gambar" terakhir saya (lapisan, sungguh - yang membuat saya bingung, karena saya baru saja masuk ke dalam pembuatan buruh pelabuhan).
Saya mendapatkan seluruh pesan "... tidak bisa dipaksa ...". Saya menyadari bahwa saya tidak dapat menghapus gambar yang tidak saya perlukan karena gambar tersebut sebenarnya bukan gambar independen yang dibuat oleh 'docker commit'. Masalah saya adalah, saya memiliki beberapa gambar (atau lapisan) antara gambar dasar dan gambar akhir saya, dan hanya mencoba untuk membersihkan di mana saya menemukan kesalahan / peringatan tentang anak dan orang tua.
docker image load -i FinalImage.tar.gz
. Outputnya seperti ini:ID gambar yang dimuat: sha256: 82d4f8ef9ea1eab72d989455728762ed3c0fe35fd85acf9edc47b41dacfd6382
Sekarang, ketika saya mendaftar dengan 'docker image ls', saya hanya memiliki gambar dasar asli, dan gambar akhir yang saya simpan sebelumnya ke tarball.
Sistem saya sekarang 'bersih'. Saya hanya memiliki gambar yang saya inginkan. Saya bahkan menghapus gambar dasar tanpa masalah.
sumber
Berdasarkan jawaban slushy dan Michael Hoffman , jika Anda tidak memiliki banyak gambar, Anda dapat menggunakan fungsi shell ini:
dan kemudian menyebutnya menggunakan
sumber
Berikut adalah solusi berdasarkan Python API (
pip install docker
) yang secara rekursif mencantumkan turunan bersama dengan tag mereka (jika ada), meningkatkan indentasi sesuai dengan kedalaman hubungan (anak, cucu, dll.):Contoh:
Saya telah membuatnya tersedia sebagai intinya di https://gist.github.com/simleo/10ad923f9d8a2fa410f7ec2d7e96ad57
sumber
Berikut cara sederhana untuk mendapatkan daftar gambar anak yang bergantung pada gambar induk:
Itu akan menghasilkan daftar ID gambar anak / induk, misalnya (dipotong agar singkat):
Sisi kiri adalah ID gambar anak, sisi kanan adalah ID gambar induk yang kita coba hapus, tetapi dikatakan "gambar memiliki gambar anak dependen". Ini memberitahu kita bahwa itu
abcdefghijkl
adalah anak yang menjadi tanggungan123456789012
. Jadi kita perlu duludocker rmi abcdefghijkl
, baru kamu bisadocker rmi 123456789012
.Sekarang, mungkin ada rangkaian gambar anak yang bergantung, jadi Anda mungkin harus terus mengulang untuk menemukan anak terakhir.
sumber
Anda dapat menghapus image Docker terlepas dari relasi induk dan anak melalui direktori Docker di bawah ini
Di direktori ini Anda dapat menemukan gambar Docker, sehingga Anda dapat menghapus apa yang Anda inginkan.
sumber
/var/lib/docker
secara langsung dengan tanganBagaimana tentang:
Ini akan mencetak id gambar anak, dengan
sha256:
awalan.Saya juga memiliki yang berikut ini, yang menambahkan nama:
ID=
Mendapatkan id penuh dari gambarIMAGES=
Mendapatkan semua gambar anak yang memiliki gambar ini terdaftar sebagai fileImage
echo...
Menghapus duplikat dan menggemakan hasilnyasumber
Saya membuat ini untuk secara rekursif menemukan anak-anak, tag repo mereka, dan mencetak apa yang mereka lakukan:
Jangan lupa untuk menghapus / tmp / dii- * jika host Anda tidak aman.
sumber
Saya juga menghadapi masalah yang sama. Langkah-langkah bera di bawah ini untuk menyelesaikan masalah.
Hentikan semua kontainer yang sedang berjalan
buruh pelabuhan stop $ (buruh pelabuhan ps -aq) Hapus semua kontainer
docker rm $ (docker ps -aq) Hapus semua gambar
buruh pelabuhan rmi $ (gambar buruh pelabuhan -q)
sumber