Tôi có nên lo lắng về các container Docker dư thừa, không chạy?


142

Mỗi docker runlệnh hoặc mọi RUNlệnh bên trong Dockerfile đều tạo ra một thùng chứa. Nếu container không còn chạy, nó vẫn có thể được nhìn thấy docker ps -a.

Tôi có nên lo lắng về việc có một danh sách khổng lồ các container không chạy không? Tôi có nên phát hành docker rmtrên các container không chạy?

Tôi không chắc chắn về hiệu suất hoặc bộ nhớ / lưu trữ phạt những container không chạy này phát sinh.


1
Một docker execlệnh đã được thêm vào một lúc trước, xem docs.docker.com/reference/commandline/cli/#exec - nó sẽ thực thi một lệnh tắt một container đang chạy.
schmunk

FYI, nếu bạn muốn xem cách loại bỏ các container cũ, hãy xem câu hỏi này: stackoverflow.com/questions/17236796/ Kẻ
Ryan Walls

1
@schmunk Liên kết đã được di chuyển. docs.docker.com/engine/reference/commandline/exec
akauppi

Câu trả lời:


72

Các thùng chứa không chạy sẽ không lấy bất kỳ tài nguyên hệ thống nào ngoài dung lượng ổ đĩa.

Việc dọn dẹp sau khi thường là tốt, nhưng nếu bạn có nhiều người trong số họ ngồi xung quanh thì không nên làm chậm hiệu suất.

Nếu bạn nhận thấy sự chậm lại khi chạy các lệnh docker với nhiều container bị dừng, đó có thể là một lỗi trong docker và bạn nên gửi một lỗi.


1
Các tài liệu cho RUNlệnh hiện đã được chuyển đến: docs.docker.io/en/latest/reference/builder/#run
aculich

63

Các docker runtài liệu mô tả làm thế nào để tự động dọn dẹp các thùng chứa và loại bỏ các hệ thống tập tin khi thoát container:

  --rm=false: Automatically remove the container when it exits (incompatible with -d)

Ở trên cho thấy rằng các container mặc định không bị xóa, nhưng thêm --rm=truehoặc chỉ tay ngắn --rmsẽ hoạt động như vậy:

sudo docker run -i -t --rm ubuntu /bin/bash

Khi bạn thoát khỏi container, nó sẽ tự động bị xóa.

Bạn có thể kiểm tra điều này bằng cách liệt kê các container docker của bạn trong một cửa sổ terminal:

watch -n1 'sudo ls -c /var/lib/docker/containers'

Và sau đó trong một cửa sổ khác chạy lệnh này để chạy nhiều container docker, tất cả sẽ tự động thoát sau khi ngủ tối đa 10 giây.

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done

4
Không phải là một câu trả lời trực tiếp cho câu hỏi , nhưng một câu trả lời thú vị sẽ cung cấp cho người dùng một số cái nhìn sâu sắc về các cơ chế đằng sau docker. Cảm ơn!
thaJeztah

3
-rmkhông được dùng nữa và sẽ được gỡ bỏ vào một lúc nào đó, sử dụng --rmthay thế.
Bain

5

Nếu bạn chạy một container có âm lượng và không sử dụng docker rm -v để xóa nó thì âm lượng sẽ không bị xóa sau khi bạn xóa một container. Ngoài ra có một vấn đề với trình điều khiển lưu trữ vfs. Nếu bạn quên dọn dẹp, khối lượng sẽ ăn hết dung lượng đĩa của bạn.


2

Tôi không chắc chắn về hiệu suất hoặc bộ nhớ / lưu trữ phạt những container không chạy này phát sinh.

Để đánh giá dung lượng bộ chứa Docker không chạy đang sử dụng, bạn có thể chạy:

docker ps --size --filter "status=exited"

Tương đương , bạn có thể chạy:docker container ls --filter "status=exited"

Bạn cũng có thể sử dụng lệnh docker system df(được giới thiệu trong Docker 1.13.0, tháng 1 năm 2017) để xem việc sử dụng đĩa docker, ví dụ:

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B
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.