Skip to main content

Command Palette

Search for a command to run...

Bài 16: Debug và xử lý lỗi Docker

Published
3 min readView as Markdown

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.yml hoặ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ụ:

  1. Truy cập shell của container:

     docker exec -it <container_id> /bin/bash
    
  2. Kiể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 IPAddress
    
  • Kiể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.jar
    

    Nếu file app.jar khô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ặc CMD khô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
  1. Tạo Dockerfile với lỗi:

     FROM openjdk:11
     COPY ./target/app.jar /app.jar
     CMD ["java", "-jar", "app.jar"]
    
  2. Build image:

     docker build -t broken-app .
    
  3. Chạy container:

     docker run broken-app
    
Bước 2: Debug lỗi bằng docker logs
  1. Xem log container:

     docker logs <container_id>
    
  2. Phân tích lỗi: Nếu log hiển thị:

     Error: Unable to access jarfile /app.jar
    

    Giả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
  1. Kiểm tra mạng của container:

     docker inspect <container_id> | grep IPAddress
    
  2. Kiể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
  1. Sửa Dockerfile:

     FROM openjdk:11
     WORKDIR /app
     COPY ./target/app.jar app.jar
     CMD ["java", "-jar", "app.jar"]
    
  2. Build lại image:

     docker build -t fixed-app .
    
  3. 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.

More from this blog

hoangkim

366 posts