Galat buruh pelabuhan tidak dapat menghapus wadah buruh pelabuhan, konflik: tidak dapat menghapus referensi repositori

165

Saya ingin menghapus wadah di Docker, tetapi terjadi kesalahan saat Anda ingin menghapus

Langkah saya selanjutnya sebelum mengeluarkan wadah, lihat daftar wadah yang ada

sts@Yudi:~/docker$ sudo docker ps -as

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
78479ffeba5c        ubuntu              "/bin/bash"         42 hours ago        Exited (0) 42 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
0bd2b54678c7        training/webapp     "python app.py"     5 days ago          Exited (0) 5 days ago                         backstabbing_ritchie   0 B (virtual 323.7 MB)
0adbc74a3803        training/webapp     "python app.py"     5 days ago          Exited (143) 5 days ago                       drunk_feynman          0 B (virtual 323.7 MB)

yang saya ingin hapus daftarnya, yaitu "training / webapp" tetapi ada kesalahan yang terjadi

sts@Yudi:~/docker$ sudo docker rmi training/webapp
Error response from daemon: conflict: unable to remove repository reference "training/webapp" (must force) - container 0bd2b54678c7 is using its referenced image 54bb4e8718e8
Error: failed to remove images: [training/webapp]

Apakah wadah berjalan dalam gambar?

Tolong bantu

Yuday
sumber
ini kadang-kadang terjadi pada saya, tetapi saya tidak dapat menemukan pola penyebabnya (karena tidak selalu terjadi pada saya), ditambah jika saya memaksakan menghapus gambar itu juga menghilangkan banyak hal lain. Apakah Anda tahu apa yang menyebabkan kesalahan bagi Anda? apakah kamu bisa memperbanyaknya?
Charlie Parker
Ringkasan terkini yang sangat baik Cara Menghapus Gambar Docker, Kontainer, dan Volume dari Melissa Anderson Des 2017, dengan contoh filter, pola, dll.
Webel IT Australia - upvoter

Jawaban:

124

Ada perbedaan antara gambar buruh pelabuhan dan wadah buruh pelabuhan. Lihat Pertanyaan SO ini .

Singkatnya, sebuah wadah adalah turunan dari suatu gambar. itulah sebabnya Anda tidak dapat menghapus gambar jika ada wadah berjalan dari gambar itu. Anda hanya perlu menghapus wadah terlebih dahulu.

docker ps -a               # Lists containers (and tells you which images they are spun from)
docker images              # Lists images  
docker rm <container_id>   # Removes a container

docker rmi <image_id>      # Removes an image 
                           # Will fail if there is a running instance of that image i.e. container

docker rmi -f <image_id>   # Forces removal of image even if it is referenced in multiple repositories, 
                           # i.e. same image id given multiple names/tags 
                           # Will still fail if there is a docker container referencing image

Pembaruan untuk Docker 1.13+ [Sejak Jan 2017]

Di Docker 1.13, kami mengelompokkan kembali setiap perintah untuk duduk di bawah objek logis yang berinteraksi dengannya

Pada dasarnya, perintah di atas juga dapat ditulis ulang, lebih jelas, seperti:

docker container ls -a
docker image ls
docker container rm <container_id>
docker image rm <image_id>

Juga, jika Anda ingin menghapus SEMUA yang bisa Anda gunakan:

docker system prune -a

PERINGATAN! Ini akan menghapus:

  • semua kontainer berhenti
  • semua jaringan tidak digunakan oleh setidaknya satu wadah
  • semua gambar yang tidak digunakan
  • semua build cache
Ahmad Abdelghany
sumber
2
Saya akhirnya harus menggunakan docker rmi -f iduntuk "memaksa" penghapusan.
WernerCD
@WernerCD -fmembantu ketika Anda ingin menghapus gambar yang direferensikan dalam beberapa repositori yang merupakan alasan umum lainnya untuk gagal menghapus gambar.
Ahmad Abdelghany
1
Perlu dicatat bahwa docker container lshanya daftar kontainer yang berjalan. Ini mengacaukan saya sampai saya menyadari bahwa menambahkan -abendera mencantumkan semuanya.
MFB
@MFB Poin bagus. Menambahkan bendera ke perintah untuk menjaga keseimbangan antara dua set perintah. Terima kasih!
Ahmad Abdelghany
masih bekerja di OSX Docker Desktop v2.2.0.4 (engine 19.03.8)
rrrrrraul
83

Pertama, hapus nama wadah

$ sudo docker rm backstabbing_ritchie

Hasil

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

hapus bagian kedua, yang tercantum pada wadah yang akan dihapus

$ sudo docker rm drunk_feynman 
  drunk_feynman

Kedua, lepaskan wadah

$ sudo docker rmi training/webapp

Hasil

$ sudo docker rmi training/webapp  
  Untagged: training/webapp:latest
  Deleted: 54bb4e8718e8600d78a5d7c62208c2f13c8caf0e4fe73d2bc0e474e93659c0b5
  Deleted: f74dd040041eb4c032d3025fe38ea85de8075992bdce6789b694a44b20feb8de
  Deleted: 7cbae69141977b99c44dc6957b032ad50c1379124d62b7d7d05ab7329b42348e
  Deleted: abb991a4ed5e4cde2d9964aec4cccbe0015ba9cc9838b696e7a32e1ddf4a49bd
  Deleted: 1952e3bf3d7e8e6a9b1e23bd4142e3c42ff7f4b7925122189704323593fd54ac
  Deleted: f95ebd363bf27a7546deced7a41a4099334e37a3d2901fa3817e62bb1ade183f
  Deleted: 20dd0c75901396d41a7b64d551ff04952084cc3947e66c67bae35759c80da338
  Deleted: 2505b734adda3720799dde5004302f5edb3f2a2ff71438f6488b530b728ba666
  Deleted: 2ee0b8f351f753f78f1178000ae37616eb5bf241d4ef041b612d58e1fd2aefdc
  Deleted: 2ce633e3e9c9bd9e8fe7ade5984d7656ec3fc3994f05a97d5490190ef95bce8d
  Deleted: 98b15185dba7f85308eb0e21196956bba653cf142b36dc08059b3468a01bf35d
  Deleted: 515565c29c940355ec886c992231c6019a6cffa17ff1d2abdfc844867c9080c5
  Deleted: 2880a3395eded9b748c94d27767e1e202f8d7cb06f1e40e18d1b1c77687aef77

Periksa konter

  $ sudo docker ps -as
  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
  78479ffeba5c        ubuntu              "/bin/bash"         43 hours ago        Exited (0) 43 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
Yuday
sumber
6
Jika Anda memiliki banyak kontainer lama, Anda mungkin juga mempertimbangkan buruh pelabuhan rm `docker ps -aq`untuk pembersihan, daripada memindahkannya satu per satu. Informasi lebih lanjut di sini
Philiiiiiipp
Mengapa perlu menghapus nama sebelum menghapus gambar? Mengapa harus mencoba menghapus gambar tanpa menghapus nama terlebih dahulu menjadi masalah?
code_dredd
@code_dredd Tidak ada yang namanya "menghapus nama". Ini adalah wadah yang harus dihapus terlebih dahulu sebelum menghapus gambar. Lebih detail di stackoverflow.com/a/40283776/1998422
Ahmad Abdelghany
37

Jika Anda ingin membersihkan gambar dan wadah buruh pelabuhan

PERHATIAN: ini akan menyiram segalanya

hentikan semua kontainer

docker stop $(docker ps -a -q)

hapus semua wadah

docker rm $(docker ps -a -q)

hapus semua gambar

docker rmi -f $(docker images -a -q)
quAnton
sumber
Itu berhasil. Juga, jika Anda menghentikan wadah, Anda masih akan melihatnya dalam daftar. Karena itu, Anda harus menghapusnya dengan docker rm $(docker ps -a -q). Terima kasih!
28

Anda dapat menggunakan -fopsi untuk memaksa menghapus wadah.

sudo docker rmi -f training/webapp

Anda dapat menghentikan penggunaan wadah sudo docker stop training/webappsebelum menghapus

Saril Sudhakaran
sumber
1
Saya sudah mencobanya, dengan menghentikan kontainer $ sudo docker stop training / webapp Tanggapan kesalahan dari daemon: tidak ada id seperti itu: training / webapp Error: gagal menghentikan kontainer: [training / webapp]
Yuday
Anda dapat mencoba menghentikannya dengan ID wadah sudo docker stop 0bd2b54678c7
Saril Sudhakaran
23

Jika Anda memiliki beberapa wadah docker yang diluncurkan, gunakan ini

$ docker rm $(docker ps -aq)

Ini akan menghapus semua buruh pelabuhan saat ini yang tercantum dalam perintah "ps -aq".

Sumber: aaam di https://github.com/docker/docker/issues/12487

Gael
sumber
Ini berhasil untuk saya. Setelah saya menjalankan perintah ini, saya harus menjalankan docker image lsdan kemudian di docker image rm Xmana masing-masing X diperoleh dari lsoutput.
jftuga
5

Memperhatikan ini adalah pertanyaan berusia 2 tahun, tetapi masih ingin membagikan solusi saya untuk pertanyaan khusus ini:

Pertama, jalankan docker container ls -adaftar semua wadah yang Anda miliki dan tentukan keinginan yang ingin Anda hapus.

Kedua, hapus satu dengan perintah docker container rm <CONTAINER ID>(Jika wadah saat ini sedang berjalan, Anda harus menghentikannya terlebih dahulu, lari docker container stop <CONTAINER ID>dengan anggun menghentikan wadah yang ditentukan, jika tidak menghentikannya karena alasan apa pun, atau Anda dapat menjalankannya docker container kill <CONTAINER ID> to force shutdown of the specified container).

Ketiga, lepaskan wadah dengan menjalankan docker container rm <CONTAINER ID>.

Terakhir Anda dapat menjalankan docker image ls -auntuk melihat semua gambar dan menghapus yang Anda inginkan dengan menjalankan docker image rm <hash>.

User3301
sumber
2

Hapus gambar buruh pelabuhan>

Daftar semua wadah

docker container ls

Daftar semua gambar

docker image ls

Hentikan wadah demi wadah id

docker container stop <container_id>

Hapus wadah demi wadah id

docker container rm <container_id>

Jika tidak ingin berhenti dan menghapus, bisa memaksa menghapus

docker container rm -f <container_id>

Hapus gambar

docker image rm <image_id>

Selesai!

Anthony Piñero
sumber
2

daftar semua gambar buruh pelabuhan Anda:

docker images

daftar semua wadah buruh pelabuhan yang ada:

docker ps -a

hapus semua wadah yang ditargetkan, yang menggunakan gambar yang ingin Anda hapus:

docker rm <container-id>

hapus gambar yang ditargetkan:

docker rmi <image-name:image-tag or image-id>
Mhd Medfa
sumber
0

Hapus hanya wadah yang terkait dengan gambar tertentu

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a: daftarkan semua wadah
  • grep training / webapp: saring semua kecuali wadah dimulai dari gambar training / webapp
  • cut -d '' -f 1: daftar hanya id kontainer (bidang pertama saat dibatasi oleh ruang)
  • xargs docker rm: mengirim output daftar id kontainer ke perintah docker rm untuk menghapus kontainer
AndrewD
sumber