Le contrôle de santé de docker-compose réussit, mais toujours en mauvais état
P粉596161915
P粉596161915 2024-02-26 10:58:41
0
2
376

condition 在版本 3.0 至 3.8 中已删除 compose 规范,但现在又回来了!使用 compose 规范 v3.9 版本,您可以使用 condition 作为 depends_on Options sous forme de syntaxe longue.

J'utilise docker compose pour démarrer des projets web MySQL et Java, Le démarrage de JavaWeb nécessite que MySQL crée des données complètes, j'utilise donc healthcheck

Mais 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

La déclaration incorrecte est :

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

Sortie console :

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

En raison de fubaquant dependants_on mysql healthcheck, fubaquant n'est pas démarré non plus

Le journal de contrôle de santé du conteneur mysql est :

J'ai vérifié le journal de vérification de l'état de MySQL et il est également sain

Merci pour votre aide

P粉596161915
P粉596161915

répondre à tous(2)
P粉316890884

Il semble que vous essayez d'exécuter le bilan de santé avec un utilisateur et un mot de passe incorrects. Vous avez

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

$mysql3456 va essayer d'analyser les valeurs de ces variables. Ce que vous voulez, c'est utiliser ce qui suit.

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

Cela tentera ensuite d'utiliser les variables d'environnement du service utilisateur mysql 和密码 123456 运行 mysaqladmin (两者都定义为 docker-compose 上 mysql)

P粉022140576

J'ai configuré le bilan de santé pour autoriser uniquement 3 tentatives avec un intervalle de 1 seconde. Lorsque compose démarre Java, le service mysql n'a pas atteint un état sain dans ce délai de 3 secondes, donc compose s'arrête et signale cette erreur. Augmentez simplement le nombre de tentatives et tout ira bien

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal