Thursday, November 21, 2024

Xử lý Container treo ở trạng thái Removal In Progress trong Docker

-

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 75b4ad3321e5container_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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories