Trạng thái “Removal In Progress” của một Docker container nghĩa là container đó đang được gỡ bỏ (được xóa). Khi bạn yêu cầu Docker xóa một container, Docker sẽ bắt đầu quá trình xóa nó. Trong quá trình này, Docker sẽ loại bỏ các tài nguyên và dữ liệu của container đó khỏi hệ thống.
Trong giai đoạn này, container vẫn tồn tại, nhưng không thể sử dụng. Sau khi quá trình xóa hoàn thành, container sẽ biến mất hoàn toàn và không còn tồn tại trên hệ thống của bạn.
Bạn có thể theo dõi trạng thái của container bằng cách sử dụng lệnh docker ps -a
để xem danh sách tất cả các container (bao gồm cả các container đã dừng hoặc đang bị xóa) và kiểm tra trạng thái của container bạn quan tâm.
Nếu trạng thái “Removal In Progress” của container bị treo rất lâu, điều này có thể có nhiều nguyên nhân.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75b4ad3321e5 2730133d59f6 "/usr/local/bin/dock…" 29 minutes ago Removal In Progress
b064529ac873 linuxserver/wireguard "/init" 2 months ago Up 2 months 0.0.0.0:51820->51820/udp, :::51820->51820/udp wireguard
30b4497c7cb6 nginx "/docker-entrypoint.…" 6 months ago Up 2 weeks 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp wiki-nginx
07e58d42507d wordpress "docker-entrypoint.s…" 6 months ago Up 2 months 80/tcp wiki-wordpress
46bedda669a6 mariadb:10.7.8 "docker-entrypoint.s…" 6 months ago Up 2 months 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp wiki-mariadb
Dưới đây là một số khả năng và cách khắc phục:
Container chứa nhiều dữ liệu lớn.
Nếu container chứa nhiều dữ liệu lớn hoặc file tin lớn, quá trình xóa có thể mất thời gian. Hãy kiên nhẫn và đợi quá trình hoàn tất. Đừng ngắt kết nối hoặc hủy bỏ quá trình xóa, vì điều này có thể gây ra sự hỏng hóc.
Rủi ro về tài nguyên.
Nếu máy chủ Docker của bạn bị thiếu tài nguyên hoặc quá tải, quá trình xóa container có thể bị treo. Hãy kiểm tra xem máy chủ của bạn có đủ tài nguyên (CPU, RAM, bộ nhớ đĩa) không và giải quyết vấn đề nếu cần.
Lỗi hệ thống.
Có thể có lỗi hệ thống hoặc lỗi Docker đang gây ra sự cố trong quá trình xóa container. Bạn nên kiểm tra các log và tài liệu liên quan để xác định vấn đề và khắc phục nó.
Sử dụng lệnh docker rm
.
Thay vì sử dụng lệnh docker stop
và sau đó xóa container, bạn có thể thử sử dụng lệnh docker rm
trực tiếp để gỡ bỏ container.
Lệnh này sẽ gỡ bỏ container ngay lập tức mà không cần dừng nó trước.
docker rm -f container_id
Rất có thể bạn sẽ gặp thông báo không tìm thấy container như dưới.
$ docker rm -f 75b4ad3321e5
Error: No such container: 75b4ad3321e5
Bạn hãy stop Docker, nhưng trước khi stop dịch vụ Docker thì hãy stop các container trước nhé. Lệnh docker stop $(docker ps -a -q)
sẽ giúp bạn stop tất cả các container đang running.
$ docker stop $(docker ps -a -q)
b064529ac873
30b4497c7cb6
07e58d42507d
46bedda669a6
Sau khi container đã stop hoàn toàn, hãy dừng dịch vụ Docker bằng lệnh dưới.
$ sudo systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
Hãy chắc chắn rằng Docker đã tạm dừng hoàn toàn.
$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Wed 2023-10-11 01:04:12 +07; 3s ago
Docs: https://docs.docker.com
Process: 103427 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=0/SUCCESS)
Main PID: 103427 (code=exited, status=0/SUCCESS)
Hãy xoá thư mục lưu trữ container
bằng cách xoá thư mục có tên bắt đầu là container_id
, bạn có thể nhấn nút tab để hiển thị đầy đủ tên thư mục của container nhé.
sudo rm -rf /var/lib/docker/containers/<CONTAINER_ID><TAB>
Ví dụ gõ sudo rm -rf /var/lib/docker/containers/75b4ad3321e5
nhấn nút tab, với 75b4ad3321e5
là container_id
bạn lấy được nhờ lệnh docker ps
.
sudo rm -rf /var/lib/docker/containers/75b4ad3321e5<TAB>
Xong rồi, bây giờ hãy start Docker lên thôi.
sudo systemctl start docker
Kết quả, bạn sẽ thấy container với trạng thái Removal In Progress
đã biến mất.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b064529ac873 linuxserver/wireguard "/init" 2 months ago Up 2 months 0.0.0.0:51820->51820/udp, :::51820->51820/udp wireguard
30b4497c7cb6 nginx "/docker-entrypoint.…" 6 months ago Up 2 weeks 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp wiki-nginx
07e58d42507d wordpress "docker-entrypoint.s…" 6 months ago Up 2 months 80/tcp wiki-wordpress
46bedda669a6 mariadb:10.7.8 "docker-entrypoint.s…" 6 months ago Up 2 months 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp wiki-mariadb
Xoá container với trạng thái Removal In Progress
bằng cách xoá image đang chạy container đó với tuỳ chọn -force.
Cách này cũng được nhưng hơi nguy hiểm do nếu image đó dùng cho nhiều container thì bạn sẽ bị hỏng luôn container đang chạy image mà bạn vừa xoá.
Để thực hiện bằng cách này bạn hãy xem xét kỹ trước khi thực hiện nhé.
Đơn giản chỉ cần xoá image bằng lệnh.
docker image rm -f <image_id>
Sau đó restart lại Docker, tương tự bạn hãy stop Docker, nhưng trước khi stop dịch vụ Docker thì hãy stop các container trước nhé. Lệnh docker stop $(docker ps -a -q)
sẽ giúp bạn stop tất cả các container đang running.
$ docker stop $(docker ps -a -q)
b064529ac873
30b4497c7cb6
07e58d42507d
46bedda669a6
Khởi động lại Docker và chiêm ngưỡng kết quả thôi.
sudo systemctl restart docker
Nâng cấp Docker.
Nếu bạn đang sử dụng một phiên bản cũ của Docker, nâng cấp lên phiên bản mới nhất có thể giải quyết một số vấn đề.
Nếu sau khi thực hiện các bước trên vẫn gặp vấn đề, hãy cân nhắc tìm hiểu chi tiết về lỗi cụ thể hoặc tìm sự hỗ trợ từ cộng đồng Docker hoặc nhà cung cấp dịch vụ máy chủ Docker của bạn.