首頁 >資料庫 >mysql教程 >在 Docker Compose 中啟動依賴服務之前如何確保 MySQL 連線就緒?

在 Docker Compose 中啟動依賴服務之前如何確保 MySQL 連線就緒?

DDD
DDD原創
2024-12-09 15:40:12654瀏覽

How to Ensure MySQL Connection Readiness Before Starting Dependent Services in Docker Compose?

Docker-Compose:在服務啟動前確保MySQL 連線就緒

在Docker-compose 環境中,確保依賴的服務至關重要諸如資料庫之類的服務,在依賴它們的其他服務啟動之前就已準備好連接。本文提供了使用 Docker-compose 版本 2 中的 healthcheck 選項檢查 MySQL 連線準備情況的解決方案。

Healthcheck 配置

為 MySQL 容器設定運行狀況檢查,在容器的配置中定義它。以下是健康檢查範例:

healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
    timeout: 20s
    retries: 10

此健康檢查使用 mysqladmin ping 指令來驗證 MySQL 是否正在執行並接受連線。如果命令在指定的逾時和重試限制內成功返回,則容器被認為是健康的。

依賴健康服務

定義健康檢查後,依賴的服務(在本例中為「app」容器)可以使用depends_on指定對MySQL容器的依賴關係選項:

app:
    depends_on:
        db:
            condition: service_healthy

此組態可確保僅當「db」容器(MySQL)當根據定義的運作狀況檢查運作正常時,「app」容器才會啟動。

範例 Docker -compose 檔案

將它們放在一起,這裡是一個使用此的範例 Docker-compose檔案setup:

version: "2.1"
services:
    api:
        build: .
        container_name: api
        ports:
            - "8080:8080"
        depends_on:
            db:
                condition: service_healthy
    db:
        container_name: db
        image: mysql
        ports:
            - "3306"
        environment:
            MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
            MYSQL_USER: "user"
            MYSQL_PASSWORD: "password"
            MYSQL_DATABASE: "database"
        healthcheck:
            test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
            timeout: 20s
            retries: 10

使用此配置,「api」容器將不會啟動,直到「db」容器(MySQL)運作正常並接受連接,確保資料庫在應用程式啟動之前準備就緒。

以上是在 Docker Compose 中啟動依賴服務之前如何確保 MySQL 連線就緒?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn