CodeGym /Adesua ahorow /Docker SELF /在 Docker Compose 中調試應用程序

在 Docker Compose 中調試應用程序

Docker SELF
等級 16 , 課堂 3
開放

9.1 調試工具和指令

Docker Compose 讓多容器應用程式的開發和部署變得超簡單,但就像其他技術一樣,有時難免會出問題,這時就需要調試來解決問題。在這一講中,我們會來看看在 Docker Compose 中找 Bug 和調試應用程式的基本方法和工具。

常見問題及解決方法:

  1. 啟動容器時遇到的問題:
    • 檢查容器的 logs。
    • 檢查容器的狀態。
    • 檢查設定檔。
  2. 網路問題:
    • 檢查網路連線。
    • 使用容器內的網路工具。
  3. Volume 的問題:
    • 檢查 volume 的掛載。
    • 檢查對 volume 的訪問權限。

調試的工具和指令:

1. 查看容器 logs

容器 logs 是出問題時首選的查看地方。指令 docker compose logs 可以查閱所有在 compose.yaml 中定義的服務的 logs。

終端機

docker compose logs

可以指定某個具體的服務,來查看它的 logs:

終端機

docker compose logs <service_name>

2. 檢查容器狀態

指令 docker compose ps 會顯示由 Docker Compose 管理的所有容器的狀態資訊。

終端機

docker compose ps

這個指令的輸出會顯示容器的狀態、埠和識別碼。

3. 重啟容器

如果容器運行異常,可以試著重啟它:

終端機

docker compose restart <service_name>

4. 連接正在運行的容器

若想更深入地研究問題,可以使用指令 docker compose exec 連接到正在運行的容器中。

終端機

docker compose exec <service_name> /bin/bash

這個指令 會打開容器內的終端機,以便執行診斷指令。

5. 使用網路工具

在容器內檢查網路連線可以幫助診斷網路問題。你可以使用工具,比如 ping, curl, netcat 等等。

終端機

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 進階方法

進階的錯誤排查方法

1. 檢查 Docker Compose 檔案

compose.yaml 檔案中的錯誤可能導致容器運行不正常。使用以下指令檢查檔案語法:

Terminal

docker compose config

此指令會檢查檔案是否有錯,並輸出最終配置。

2. 使用 Healthcheck

你可以在 compose.yaml 裡定義服務的 healthcheck,讓 Docker 自動檢查容器狀態。

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. 檢查卷掛載

卷的問題可能因掛載不正確或存取權限不足而產生。確保卷正確掛載且容器有訪問權限。

Yaml

version: '3.8'

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

volumes:
  db-data:

3.1 檢查卷的可用性

為了檢查卷是否可供容器使用,可以啟動容器並執行檢查卷的指令(例如列出卷中的檔案)。假設卷掛載在容器中的路徑是 /mnt/volume

Terminal

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

如果卷可用,指令 ls 會列出卷中的檔案和目錄。如果卷不可用或為空,則會顯示相應的訊息。

3.2 檢查卷中的可用空間

若要檢查容器內卷的可用空間,可以使用指令 df

Terminal

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

此指令顯示掛載卷所在的檔案系統的可用空間。選項 -h 會以易讀格式(例如 MB, GB 等)顯示資訊。

4. 使用 IDE

使用具有 debug 功能和日誌記錄的 IDE 可以簡化除錯過程。你可以為開發和生產建立單獨的配置檔案,使用參數 --file

Terminal

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

重要! 這裡有一個非常有用的教學,介紹如何通過 IntelliJ IDEA 設置在 Docker 中運行的應用的遠端除錯: 設置遠端除錯 .

5. 檢查環境變數

錯誤或缺失的環境變數可能導致問題。確保所有必要的變數已在 .env 檔案中或直接在 compose.yaml 中設置。

Yaml

version: '3.8'

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

9.3 用於調試的指令範例

用於調試的指令範例

範例 1:檢查並修復與資料庫的連接問題

查看服務 web 的日誌:

終端機

docker compose logs web

檢查 webdb 之間的網絡連接:

終端機

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

連接到容器 web 進行診斷:

終端機

docker compose exec web /bin/bash

範例 2:檢查與卷相關的問題

檢查卷的掛載:

Yaml

version: '3.8'

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

連接到容器 db 並檢查數據:

終端機

docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
1
Опрос
服務擴展,  16 уровень,  3 лекция
недоступен
服務擴展
服務擴展
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION