docker-compose健康檢查通過,但仍不健康
P粉596161915
P粉596161915 2024-02-26 10:58:41
0
2
405

condition 在版本 3.0 至 3.8 中已刪除 compose 規範,但現在又回來了!使用 compose 規格 v3.9 版本,您可以使用 condition 作為 depends_on 長語法形式的選項。

我使用 docker compose 啟動 MySQL 和 Java Web 項目, JavaWeb的啟動需要依賴MySQL來建立完整的數據,所以我使用healthcheck

但是mysql的 healthcheck有問題,這是我的docker-compose

# docker-compose.yml
version: "3.9"  

services:

  mysql:
    build:
      context: ./mysql
    command: [
        'mysqld',
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_unicode_ci',
        '--default-time-zone=+8:00',
        '--lower-case-table-names=1'
    ]
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: fuba-db
      MYSQL_ROOT_PASSWORD: fb123456
    healthcheck:
      test: "mysql -uroot -p$$MYSQL_ROOT_PASSWORD  -e 'SELECT * FROM factor_header' fuba-db "
      interval: 1s
      timeout: 3s
      retries: 3

  redis:
    build:
      ......

  nginx:
    build:
      ......

  fubaquant:
    build:
      context: ./webapps
    ports:
      - "8080:8080"
    volumes:
      - /mnt/java/jar:/home/ruoyi  #jar包
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_started

錯誤的說法是:

test: "mysql -uroot -p$$MYSQL_ROOT_PASSWORD  -e 'SELECT * FROM factor_header' fuba-db "

控制台輸出:

pro-mysql-1      | 2022-04-07T08:16:54.203710Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
container for service "mysql" is unhealthy

由於 fubaquant dependents_on mysql healthcheck,fubaquant 也沒有啟動

mysql容器的健康檢查日誌為:

我檢查了mysql的健康檢查日誌,它也很健康

感謝您的幫助

P粉596161915
P粉596161915

全部回覆(2)
P粉316890884

您似乎正在嘗試使用錯誤的使用者和密碼來執行運行狀況檢查。你有

healthcheck:
      test: ["CMD", "mysqladmin", "-u$mysql", "-p$123456", "ping", "-h", "localhost"]

$mysql$123456 將嘗試解析這些變數的值。您想要的是使用以下內容。

healthcheck:
      test: ["CMD", "mysqladmin", "-u$MYSQL_USER", "-p$MYSQL_PASSWORD", "ping", "-h", "localhost"]

然後,這將嘗試使用使用者mysql 和密碼123456 執行mysaqladmin (兩者都定義為docker-compose 上mysql 服務的環境變數)

P粉022140576

我將運行狀況檢查配置為僅允許 3 次重試,間隔 1 秒。當 compose 啟動 java 時,mysql 服務在這 3 秒的延遲內尚未達到健康狀態,因此 compose 停止並報告此錯誤。 增加重試次數後就可以了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板