Debug container đầu tiên
Từ triệu chứng “container không lên” đến quy trình tái lập lỗi.
Nắm bản chất
Đừng xử lý container không lên bằng cách restart liên tục. Trước tiên xác định container đã được tạo chưa, trạng thái gì, exit code nào, signal gì. Sau đó kiểm tra logs, command/entrypoint, environment và mounts.
Exited (1) thường gợi ý ứng dụng lỗi; Exited (137) có
thể là SIGKILL, phải kiểm tra OOM và nguyên nhân khác.
Created nhưng chưa chạy có thể liên quan sai cấu hình hoặc chưa
start. Nếu ứng dụng chạy nhưng không kết nối được, xem phần networking thay vì
sửa Dockerfile tùy tiện.
Luồng hoạt động
Hãy tự giải thích mỗi mũi tên: dữ liệu, quyền hoặc tín hiệu nào được truyền qua bước này?
Lệnh & cấu hình mẫu
docker ps -a --no-trunc
docker inspect CONTAINER --format '{{json .State}}'
docker logs --timestamps --tail=100 CONTAINER
docker inspect CONTAINER --format '{{json .Mounts}}'
docker stats --no-stream
Lệnh có placeholder hoặc phụ thuộc môi trường thì cần thay thông tin thực tế, kiểm tra quyền và chỉ thực hiện trên tài nguyên được phép.
Bài tập 10–20 phút
Cố tình chạy
docker run --name fail-demo alpine:3.20 sh -c 'echo failure >&2;
exit 7'. Phân tích exit code bằng inspect, đọc STDERR bằng logs, sau đó xóa
container.
Lỗi dễ mắc
Trên host production, tránh dùng
docker system prune --volumes để “dọn lỗi” khi chưa kiểm kê dữ
liệu. Resource bị xóa có thể không khôi phục được.
Tự kiểm tra
Bốn loại bằng chứng đầu tiên khi container không start là gì?Xem đáp án ↗
Trạng thái/exit code, logs, command/entrypoint, và cấu hình mounts/environment/network trong inspect.
Học thêm qua lab
Bài học nền tảng có thể thực hiện trực tiếp bằng các lệnh trên; bảng tra cứu nhanh giúp ôn tập.
→ Mở bảng lệnh tra cứu nhanhĐối chiếu tài liệu gốc
Cú pháp và khả năng hỗ trợ có thể thay đổi theo phiên bản. Trước khi dùng Production, hãy kiểm tra tài liệu tương ứng.
Mở tài liệu chính thức ↗