gambar sedang digunakan oleh kontainer yang dihentikan

94

Saya mencoba untuk menghapus kontainer buruh pelabuhan dengan perintah ini:

docker rmi <Image-Id>

Jelas, saya telah mengganti Image-Id dengan Id yang saya gunakan:

docker images

Tetapi saya melihat kesalahan di bawah ini:

Error response from daemon: conflict: unable to delete <Image-ID> (must be forced) - image is being used by stopped container xxxxxxxxxxx
Mehrdad Babaki
sumber

Jawaban:

121

Anda juga dapat menggunakan --force , -fPaksa penghapusan gambar

Jika Anda menggunakan -f flag dan menentukan ID pendek atau panjang gambar, maka perintah ini membatalkan tag dan menghapus semua gambar yang cocok dengan ID yang ditentukan.

  docker rmi -f <image_id> 
Adiii
sumber
1
Terima kasih, Ini berfungsi dengan baik tetapi ada masalah. Saya menghapus gambar 10 GB tetapi setelah menghapusnya, saya tidak dapat melihat perubahan apa pun di ruang disk kosong saya.
Mehrdad Babaki
1
apakah Anda menghapus volume yang dilampirkan dengan gambar dan apakah Anda memeriksa ukuran gambar masing
Adiii
1
Tidak juga, saya baru mengenal buruh pelabuhan. Saya akan mencoba alat ini. Bagaimana saya dapat menggunakan baris perintah untuk mendeteksi volume dan menghapusnya?
Mehrdad Babaki
1
ya volume buruh pelabuhan ls; untuk daftar volume dan untuk menghapus, volume buruh pelabuhan rm v_id
Adiii
40

Anda perlu menghapus penampung dengan docker rm, lalu Anda dapat menghapus gambar yang digunakannya docker rmi.

David Maze
sumber
3
Ini adalah bagian dari jawaban lengkap apa pun. Anda dapat menghapus paksa atau menghapus gambar yang dihentikan.
bmacnaughton
28

Anda mungkin juga menemukan bahwa Anda telah menghentikan kontainer yang menyebabkan kunci. Hapus ini terlebih dahulu menggunakan:

docker rm  $(docker ps -q -a)

Di sini kami membuat daftar proses buruh pelabuhan hanya dengan ID dan kemudian menghapusnya; Namun, buruh pelabuhan hanya akan menghapus kontainer yang dihentikan.

Selanjutnya kembali dan hapus gambar menggunakan:

docker image rm <image_id>
Angus
sumber
22

Anda harus membuang wadah terlebih dahulu.
Dipaksa adalah metode terakhir yang harus diambil.

#check container
docker ps -a

#remove container
docker rm containerID
Hideyasu.T
sumber
3
Jelas merupakan jawaban terbaik. Satu-satunya yang menjelaskan cara mendapatkan daftar kontainer yang dihentikan.
Marco
4

Jika docker rmi <image-id>tidak berhasil, coba ini:

Hentikan semua kontainer yang sedang berjalan

docker stop $(docker ps -aq)

Hapus semua wadah

docker rm $(docker ps -aq)

Hapus semua gambar

docker rmi $(docker images -q)
arilwan
sumber
3

Selain jawaban lain, saya memiliki masalah yang sama menggunakan Docker untuk Mac tetapi docker ps -atidak menunjukkan kontainer yang sedang berjalan. docker imagesPertunjukan lari :

docker/desktop-storage-provisioner   v1.0                605a0f683b7b        2 months ago        33.1MB
k8s.gcr.io/kube-controller-manager   v1.15.5             1399a72fa1a9        6 months ago        159MB
k8s.gcr.io/kube-proxy                v1.15.5             cbd7f21fec99        6 months ago        82.4MB
k8s.gcr.io/kube-apiserver            v1.15.5             e534b1952a0d        6 months ago        207MB
k8s.gcr.io/kube-scheduler            v1.15.5             fab2dded59dd        6 months ago        81.1MB
docker/kube-compose-controller       v0.4.23             a8c3d87a58e7        11 months ago       35.3MB
docker/kube-compose-api-server       v0.4.23             f3591b2cb223        11 months ago       49.9MB
k8s.gcr.io/coredns                   1.3.1               eb516548c180        16 months ago       40.3MB
k8s.gcr.io/etcd                      3.3.10              2c4adeb21b4f        17 months ago       258MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

Semua gambar ini digunakan oleh aplikasi Docker jika Anda mengaktifkan Kubernetes. Di preferensi Docker untuk Mac, ada bagian untuk Kubernetes. Jika Anda mengklik "Tampilkan penampung sistem (lanjutan)", mereka akan muncul di docker ps.

Jika Anda ingin menghapus gambar-gambar ini, Anda perlu menonaktifkan Kubernetes melalui aplikasi Docker untuk Mac, lalu coba lagi.

Eric
sumber
2

Container Docker berjalan di atas image docker, Anda hanya dapat menghapus image jika image tersebut tidak dilampirkan ke container apa pun.! Jadi, Anda harus menghentikan container dan menghapus container, lalu Anda dapat menghapus image id.

pekerja pelabuhan berhenti container-id dan docker rm container-id

Kemudian coba hapus image docker rmi image-id

Beberapa info tambahan diberikan di tautan di bawah ini. Bersulang.!

https://docs.docker.com/config/pruning/

surya kiran
sumber
Ini harus menjadi jawaban yang benar setelah proses stop container (docker-compose stop) -> hapus container (buruh pelabuhan rm <nama container>) -> hapus gambar terkait (buruh pelabuhan rmi <image_id>).
kta
1

Jika tujuannya adalah untuk mendapatkan kembali ruang disk, pendekatan lain yang belum disebutkan adalah dengan menggunakan docker system prune. Ini akan mencetak peringatan yang harus diperhatikan:

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Ini tidak akan menghapus gambar yang diberi nama, tetapi akan membersihkan gambar yang tidak dinamai. Bergantung pada ukuran wadah yang Anda gunakan, ini dapat menghemat banyak ruang disk.

Edward
sumber
0

Jika Anda telah berubah dalam Dockerfiledan jika Anda menggunakan docker compose, Anda hanya dapat membangun kembali citra Anda dengan run docker-compose dengan --buildpilihan!

ans1genie.dll
sumber
Jika Anda membuat perubahan apapun pada DockerfileAnda shoudn't menghapus gambar sendiri hanya menggunakan bendera --builddengan docker-composesehingga membangun kembali citra baru dengan perubahan
ans1genie