Bài 16: Debug và xử lý lỗi Docker
16.1. Các lỗi phổ biến khi làm việc với Docker
1. Container không khởi động
Nguyên nhân:
Lỗi trong file
Dockerfile.Các dịch vụ phụ thuộc (ví dụ: database) chưa sẵn sàng.
Biến môi trường hoặc cấu hình sai.
2. Kết nối mạng thất bại
Nguyên nhân:
Các container không thuộc cùng một mạng.
Cấu hình sai
docker-compose.ymlhoặc Docker network.
3. Lỗi không tìm thấy Docker Image
Nguyên nhân:
Image chưa được build hoặc pull đúng cách.
Sai tên image hoặc phiên bản (tag).
16.2. Cách debug container
1. Sử dụng docker logs
Lệnh docker logs giúp xem log container để kiểm tra lỗi.
Ví dụ:
docker logs <container_id>
Xem log theo thời gian thực:
docker logs -f <container_id>
Lỗi phổ biến:
Kiểm tra lỗi kết nối database:
Could not connect to database on localhost:3306
2. Sử dụng docker exec
Lệnh docker exec cho phép truy cập vào container để kiểm tra trạng thái.
Ví dụ:
Truy cập shell của container:
docker exec -it <container_id> /bin/bashKiểm tra kết nối tới database:
curl http://mysql:3306
3. Sử dụng docker inspect
Lệnh docker inspect cung cấp thông tin chi tiết về container hoặc image.
Ví dụ:
Kiểm tra thông tin mạng:
docker inspect <container_id> | grep IPAddressKiểm tra biến môi trường:
docker inspect <container_id> | grep Env
16.3. Xử lý lỗi build Docker Image
1. Kiểm tra lỗi trong Dockerfile
Lỗi không tìm thấy file:
COPY ./target/app.jar /app.jarNếu file
app.jarkhông tồn tại, cần build trước khi copy.Giải pháp:
Kiểm tra file cần copy có tồn tại:
ls ./target
Sai thứ tự lệnh: Lệnh
RUN,COPY, hoặcCMDkhông theo thứ tự hợp lý có thể gây lỗi.Ví dụ sửa:
FROM openjdk:11 WORKDIR /app COPY ./target/app.jar . CMD ["java", "-jar", "app.jar"]
2. Xử lý lỗi dependency
Nếu image không chứa đủ thư viện cần thiết, hãy thêm lệnh cài đặt:
RUN apt-get update && apt-get install -y curl
16.4. Thực hành: Debug và xử lý lỗi trong Docker
Bước 1: Tạo ứng dụng lỗi
Tạo Dockerfile với lỗi:
FROM openjdk:11 COPY ./target/app.jar /app.jar CMD ["java", "-jar", "app.jar"]Build image:
docker build -t broken-app .Chạy container:
docker run broken-app
Bước 2: Debug lỗi bằng docker logs
Xem log container:
docker logs <container_id>Phân tích lỗi: Nếu log hiển thị:
Error: Unable to access jarfile /app.jarGiải pháp: Kiểm tra file
app.jarđã được build và copy đúng chưa.
Bước 3: Debug lỗi mạng bằng docker inspect
Kiểm tra mạng của container:
docker inspect <container_id> | grep IPAddressKiểm tra kết nối từ container:
docker exec -it <container_id> curl http://mysql:3306
Bước 4: Sửa lỗi và kiểm tra
Sửa Dockerfile:
FROM openjdk:11 WORKDIR /app COPY ./target/app.jar app.jar CMD ["java", "-jar", "app.jar"]Build lại image:
docker build -t fixed-app .Chạy container:
docker run -p 8080:8080 fixed-app
Tóm tắt
Debug container:
Sử dụng
docker logsđể kiểm tra log.Sử dụng
docker execđể kiểm tra trạng thái bên trong container.Sử dụng
docker inspectđể kiểm tra thông tin mạng hoặc cấu hình.
Xử lý lỗi build Docker Image:
Kiểm tra file Dockerfile và log trong quá trình build.
Đảm bảo các file cần thiết tồn tại và được copy đúng cách.