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:
- 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.
- 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.
- 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
.
docker compose logs
Bạn có thể chỉ định một service cụ thể để xem logs của nó:
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.
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ó:
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
.
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.
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:
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.
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.
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:
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
:
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
.
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
.
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
:
docker compose logs web
Kiểm tra kết nối mạng giữa web
và db
:
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:
docker compose exec web /bin/bash
Ví dụ 2: Kiểm tra vấn đề với volumes
Kiểm tra mount volumes:
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:
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
GO TO FULL VERSION