2016-11-22 34 views
5

Tôi có kịch bản mà dừng container và sau đó loại bỏ nóHủy bỏ tất cả hình ảnh Docker trừ một

docker stop $(docker ps -q) 
docker rm $(docker ps -a -q) 

Nhưng tôi không muốn loại bỏ thùng chứa Docker với tên "my_docker" Làm thế nào tôi có thể loại bỏ tất cả các container trừ này một?

Trả lời

7

Bạn có thể thử loại này, mà sẽ

  • Lọc ra các mục không mong muốn (grep -v), và sau đó
  • lợi nhuận cột đầu tiên, trong đó có id chứa

Chạy lệnh này :

docker rm $(docker ps -a | grep -v "my_docker" | awk '{print $1}') 

Để sử dụng cut thay vì awk, hãy thử này:

docker rm $(docker ps -a | grep -v "my_docker" | cut -d ' ' -f1) 

Ví dụ cho awk/cut sử dụng ở đây: bash: shortest way to get n-th column of output

2

Đây là những gì thực sự xảy ra docker rm $(List of container Ids). Vì vậy, đó chỉ là vấn đề về cách bạn có thể lọc Danh sách các Id vùng chứa.

Ví dụ: Nếu bạn đang tìm cách xóa tất cả vùng chứa nhưng một có chứa id vùng chứa cụ thể thì docker rm $(docker ps -a -q | grep -v "my_container_id") sẽ thực hiện thủ thuật.

+1

Thao tác này sẽ không hoạt động vì 'docker ps -a -q' không in tên vùng chứa, có nghĩa là bạn không thể lọc nó bằng' grep -v'. – nwinkler

1

Tôi muốn để kiểm tra tên chai lọ bằng một cái gì đó dọc theo dòng (chưa được kiểm tra)

docker inspect --format '{{ .Name }}' $(docker ps -aq)

này sẽ cung cấp cho các tên của các container (chạy hay không), và bạn có thể lọc và

docker rm

sử dụng thông tin này

1

Tiêu đề của questio n yêu cầu hình ảnh, không phải là vùng chứa. Đối với những vấp ngã qua câu hỏi này tìm cách để loại bỏ tất cả hình ảnh, ngoại trừ một, bạn có thể sử dụng Docker mận cùng với cờ lọc:

docker image prune -a --force --filter "label!=image_name" 

thay thế image_name với tên của hình ảnh của bạn.

Bạn cũng có thể sử dụng cờ "until =" để cắt hình ảnh theo ngày.

0

Câu hỏi cũ, nhưng tôi thích khôi phục các bài đăng.

Đối với trường hợp như vậy, bạn có thể sử dụng Docker GC Spotify: https://github.com/spotify/docker-gc#excluding-containers-from-garbage-collection

Bạn có thể làm:

echo "my_docker" >> /tmp/docker-gc-exclude-containers 
echo '*' > /tmp/docker-gc-exclude 
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc:ro -v /tmp/docker-gc-exclude-containers:/etc/docker-gc-exclude-containers:ro -v /tmp/docker-gc-exclude:/etc/docker-gc-exclude:ro spotify/docker-gc 

(nếu bạn muốn để có được hình ảnh của bạn làm sạch tắt quá, bạn có thể tránh gắn file docker-gc-exclude)

Các vấn đề liên quan