CodeGym /Các khóa học /Docker SELF /Gỡ lỗi ứng dụng trong Docker Compose

Gỡ lỗi ứng dụng trong Docker Compose

Docker SELF
Mức độ , Bài học
Có sẵn

9.1 Công cụ và lệnh để gỡ lỗi

Docker Compose giúp việc phát triển và triển khai ứng dụng nhiều container trở nên dễ dàng hơn rất nhiều, nhưng, giống như với bất kỳ công nghệ nào khác, có thể xuất hiện các vấn đề cần được gỡ lỗi và giải quyết. Trong bài giảng này, chúng ta sẽ xem xét các phương pháp và công cụ chính để tìm lỗi và gỡ lỗi ứng dụng trong Docker Compose.

Các vấn đề chính và cách tiếp cận để giải quyết chúng:

  1. Vấn đề với việc khởi động container:
    • Kiểm tra logs của container.
    • Kiểm tra trạng thái của container.
    • Kiểm tra các file cấu hình.
  2. Vấn đề mạng:
    • Kiểm tra kết nối mạng.
    • Sử dụng công cụ mạng bên trong container.
  3. Vấn đề với volumes:
    • Kiểm tra việc mount volumes.
    • Kiểm tra quyền truy cập vào volumes.

Công cụ và lệnh để gỡ lỗi:

1. Xem logs của container

Logs của container là nơi đầu tiên nên kiểm tra khi có vấn đề. Lệnh docker compose logs cho phép xem logs của tất cả các service được định nghĩa trong compose.yaml.

Terminal

docker compose logs

Bạn có thể chỉ định một service cụ thể để xem logs của nó:

Terminal

docker compose logs <service_name>

2. Kiểm tra trạng thái của container

Lệnh docker compose ps hiển thị thông tin về trạng thái của tất cả các container được quản lý bởi Docker Compose.

Terminal

docker compose ps

Kết quả của command này sẽ hiển thị trạng thái, các cổng và ID của container.

3. Khởi động lại container

Nếu container không hoạt động đúng, hãy thử khởi động lại nó:

Terminal

docker compose restart <service_name>

4. Kết nối với container đang chạy

Để tìm hiểu chi tiết hơn về vấn đề, bạn có thể kết nối với container đang chạy bằng lệnh docker compose exec.

Terminal

docker compose exec <service_name> /bin/bash

Command này mở một terminal bên trong container, cho phép bạn thực hiện các command chẩn đoán.

5. Sử dụng công cụ mạng

Kiểm tra kết nối mạng bên trong container có thể giúp chẩn đoán các vấn đề liên quan đến mạng. Bạn có thể sử dụng các công cụ như ping, curl, netcat và các công cụ khác.

Terminal

docker compose exec <service_name> ping <hostname>

docker compose exec <service_name> curl http://<hostname>

docker compose exec <service_name> netcat -z -v <hostname> <port>

9.2 Các phương pháp nâng cao

Các phương pháp bổ sung để tìm lỗi

1. Kiểm tra file Docker Compose

Lỗi trong file compose.yaml có thể dẫn đến hoạt động không chính xác của containers. Hãy kiểm tra cú pháp của file bằng lệnh:

Terminal

docker compose config

Lệnh này sẽ kiểm tra file để tìm lỗi và hiển thị cấu hình cuối cùng.

2. Sử dụng Healthcheck

Bạn có thể định nghĩa healthcheck cho các dịch vụ trong compose.yaml để Docker tự động kiểm tra trạng thái của containers.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

3. Kiểm tra mounting volumes

Lỗi với volumes có thể xảy ra do không gắn đúng hoặc thiếu quyền truy cập. Hãy chắc chắn rằng volumes được gắn đúng cách và containers có quyền truy cập vào chúng.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

3.1 Kiểm tra tính khả dụng của volume

Để kiểm tra tính khả dụng của volume từ container, bạn có thể chạy container và thực hiện lệnh kiểm tra volume (ví dụ, danh sách các file trong volume). Giả sử rằng volume được gắn vào container tại đường dẫn /mnt/volume:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume

Nếu volume khả dụng, lệnh ls sẽ hiển thị danh sách các files và thư mục nằm trong volume. Nếu volume không khả dụng hoặc trống, bạn sẽ nhận được thông báo tương ứng.

3.2 Kiểm tra dung lượng trống trong volume

Để kiểm tra dung lượng trống trong volume từ bên trong container, hãy sử dụng lệnh df:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume

Lệnh này hiển thị dung lượng trống trên hệ thống file nơi volume được gắn. Tùy chọn -h hiển thị thông tin ở định dạng dễ đọc (với các đơn vị như MB, GB, v.v.).

4. Sử dụng IDE

Để đơn giản hóa việc gỡ lỗi, hãy sử dụng IDE với các chức năng debug và logging tích hợp. Bạn có thể tạo các file cấu hình riêng biệt cho development và production, sử dụng tham số --file.

Terminal

docker compose --file docker-compose.dev.yml up

Quan trọng! Đây là một hướng dẫn hữu ích về cấu hình debug từ xa của ứng dụng bên trong Docker qua IntelliJ IDEA: Cấu hình debug từ xa .

5. Kiểm tra biến môi trường

Các biến môi trường không đúng hoặc thiếu có thể gây ra vấn đề. Hãy đảm bảo rằng tất cả các biến cần thiết được thiết lập trong file .env hoặc trực tiếp trong compose.yaml.

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    environment:
      - APP_ENV=development
      - DEBUG=true

9.3 Ví dụ lệnh để gỡ lỗi

Ví dụ sử dụng các lệnh để gỡ lỗi

Ví dụ 1: Kiểm tra và sửa lỗi kết nối cơ sở dữ liệu

Xem logs của service web:

Terminal

docker compose logs web

Kiểm tra kết nối mạng giữa webdb:

Terminal

docker compose exec web ping db
docker compose exec web curl http://db:5432

Kết nối tới container web để chẩn đoán:

Terminal

docker compose exec web /bin/bash

Ví dụ 2: Kiểm tra vấn đề với volumes

Kiểm tra mount volumes:

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data
    
volumes:
  db-data:

Kết nối đến container db và kiểm tra dữ liệu:

Terminal

docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
1
Опрос
Phóng to Dịch vụ,  16 уровень,  3 лекция
недоступен
Phóng to Dịch vụ
Phóng to Dịch vụ
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION