Lỗi docker không thể xóa container docker, xung đột: không thể xóa tham chiếu kho lưu trữ


165

Tôi muốn xóa vùng chứa tại Docker, nhưng xảy ra lỗi khi bạn muốn xóa

Bước tiếp theo của tôi trước khi gỡ bỏ container, xem danh sách các container hiện có

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)

một cái tôi muốn xóa danh sách, cụ thể là "training / webapp" nhưng đã xảy ra lỗi

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]

Liệu container đang chạy trong hình ảnh?

Xin vui lòng giúp đỡ


điều này đôi khi xảy ra với tôi nhưng tôi không thể tìm ra mô hình nguyên nhân của nó xảy ra (vì nó không luôn xảy ra với tôi), cộng với nếu tôi buộc loại bỏ hình ảnh thì nó cũng loại bỏ một loạt các thứ khác. Bạn có biết những gì gây ra lỗi cho bạn? bạn có thể tái tạo nó?
Charlie Parker

Tóm tắt tuyệt vời gần đây Cách xóa hình ảnh, bộ chứa và khối của Docker khỏi Melissa Anderson tháng 12 năm 2017, với các ví dụ về bộ lọc, mẫu, v.v.
Webel IT Australia - upvoter

Câu trả lời:


124

Có một sự khác biệt giữa hình ảnh docker và container docker. Kiểm tra câu hỏi SO này .

Nói tóm lại, một container là một thể hiện đang chạy của một hình ảnh. đó là lý do tại sao bạn không thể xóa một hình ảnh nếu có một container đang chạy từ hình ảnh đó. Bạn chỉ cần xóa container trước.

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

Cập nhật cho Docker 1.13+ [Kể từ tháng 1 năm 2017]

Trong Docker 1.13, chúng tôi đã nhóm lại mọi lệnh để ngồi dưới đối tượng logic mà nó tương tác với

Về cơ bản, các lệnh trên cũng có thể được viết lại, rõ ràng hơn, như:

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

Ngoài ra, nếu bạn muốn xóa MỌI THỨ bạn có thể sử dụng:

docker system prune -a

CẢNH BÁO! Điều này sẽ loại bỏ:

  • tất cả các container đã dừng
  • tất cả các mạng không được sử dụng bởi ít nhất một container
  • tất cả hình ảnh không sử dụng
  • tất cả xây dựng bộ nhớ cache

2
Tôi cuối cùng đã phải sử dụng docker rmi -f idđể "buộc" loại bỏ.
WernerCD

@WernerCD -fgiúp khi bạn muốn xóa một hình ảnh được tham chiếu trong nhiều kho lưu trữ, đó là một lý do phổ biến khác cho việc không xóa hình ảnh.
Ahmad Abdelghany

1
đáng lưu ý rằng docker container lschỉ liệt kê các container đang chạy. Điều này gây rối cho tôi cho đến khi tôi nhận ra rằng việc thêm -acờ liệt kê tất cả chúng.
MFB

@MFB Điểm tốt. Đã thêm cờ vào lệnh để duy trì tính chẵn lẻ giữa hai bộ lệnh. Cảm ơn!
Ahmad Abdelghany

vẫn hoạt động trên OSX Docker Desktop v2.2.0.4 (động cơ 19.03.8)
rrrrrenses

83

Đầu tiên, xóa tên container

$ sudo docker rm backstabbing_ritchie

Kết quả

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

xóa phần thứ hai, được liệt kê trên container cần xóa

$ sudo docker rm drunk_feynman 
  drunk_feynman

Thứ hai, loại bỏ container

$ sudo docker rmi training/webapp

Kết quả

$ 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

Kiểm tra lục địa

  $ 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)

6
Nếu bạn có rất nhiều container cũ, bạn cũng có thể xem xét docker rm `docker ps -aq`để dọn dẹp, thay vì loại bỏ từng cái một. Thêm thông tin ở đây
Philiiiiiipp

Tại sao cần phải xóa tên trước khi xóa hình ảnh? Tại sao nên cố gắng xóa một hình ảnh với lần đầu tiên xóa tên là một vấn đề?
code_dredd

@code_dredd Không có thứ gọi là "xóa tên". Đây là container phải được xóa trước khi xóa hình ảnh. Thêm chi tiết tại stackoverflow.com/a/40283776/1998422
Ahmad Abdelghany

37

Nếu bạn muốn dọn dẹp hình ảnh docker và container

THẬN TRỌNG: điều này sẽ tuôn ra mọi thứ

dừng tất cả các container

docker stop $(docker ps -a -q)

loại bỏ tất cả các container

docker rm $(docker ps -a -q)

xóa tất cả hình ảnh

docker rmi -f $(docker images -a -q)

Điều đó đã làm việc. Ngoài ra, nếu bạn dừng container, bạn vẫn sẽ thấy nó trong danh sách. Do đó, bạn phải loại bỏ nó với docker rm $(docker ps -a -q). Cảm ơn!

28

bạn có thể sử dụng -ftùy chọn để buộc xóa các container.

sudo docker rmi -f training/webapp

Bạn có thể dừng các container sử dụng sudo docker stop training/webapptrước khi xóa


1
Tôi đã thử nó, bằng cách dừng container $ sudo docker dừng đào tạo / ứng dụng web Lỗi phản hồi từ daemon: không có id: training / webapp Lỗi: không thể dừng container: [training / webapp]
Yuday

bạn có thể thử dừng lại với ID container sudo docker stop 0bd2b54678c7
Saril Sudhakaran

23

Nếu bạn đã khởi chạy nhiều container docker, hãy sử dụng cái này

$ docker rm $(docker ps -aq)

Nó sẽ xóa tất cả các docker hiện tại được liệt kê trong lệnh "ps -aq".

Nguồn: aaam trên https://github.com/docker/docker/issues/12487


Điều này làm việc cho tôi. Sau khi tôi chạy lệnh này, tôi sẽ chạy docker image lsvà sau đó docker image rm Xmỗi X được lấy từ lsđầu ra.
jftuga

5

Nhận thấy đây là một câu hỏi 2 năm tuổi, nhưng vẫn muốn chia sẻ cách giải quyết của tôi cho câu hỏi cụ thể này:

Đầu tiên, hãy chạy docker container ls -ađể liệt kê tất cả các container bạn có và xác định chính xác bạn muốn xóa.

Thứ hai, xóa lệnh có lệnh docker container rm <CONTAINER ID>(Nếu container hiện đang chạy, bạn nên dừng nó trước, chạy docker container stop <CONTAINER ID>để dừng duyên dáng với container đã chỉ định, nếu nó không dừng vì bất kỳ lý do gì, bạn cũng có thể chạy docker container kill <CONTAINER ID> to force shutdown of the specified container).

Thứ ba, loại bỏ container bằng cách chạy docker container rm <CONTAINER ID>.

Cuối cùng, bạn có thể chạy docker image ls -ađể xem tất cả các hình ảnh và xóa hình ảnh bạn muốn bằng cách chạy docker image rm <hash>.


2

Xóa hình ảnh docker>

Liệt kê tất cả các container

docker container ls

Liệt kê tất cả hình ảnh

docker image ls

Dừng container bằng id container

docker container stop <container_id>

Xóa container bằng id container

docker container rm <container_id>

Nếu không muốn dừng lại và xóa, có thể buộc xóa

docker container rm -f <container_id>

Xóa hình ảnh

docker image rm <image_id>

Làm xong!


1

liệt kê tất cả các hình ảnh docker của bạn:

docker images

liệt kê tất cả các container docker tồn tại:

docker ps -a

xóa tất cả các thùng chứa được nhắm mục tiêu đang sử dụng hình ảnh mà bạn muốn xóa:

docker rm <container-id>

xóa hình ảnh được nhắm mục tiêu:

docker rmi <image-name:image-tag or image-id>

0

Chỉ xóa các thùng chứa được liên kết với một hình ảnh cụ thể

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a: liệt kê tất cả các container
  • grep training / webapp: lọc ra mọi thứ trừ các container bắt đầu từ hình ảnh training / webapp
  • cut -d '' -f 1: chỉ liệt kê các id container (trường đầu tiên khi được phân tách bằng dấu cách)
  • xargs docker rm: gửi đầu ra danh sách id container tới lệnh rm docker để loại bỏ container
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.