Table des matières
Bonne réponse
Maison développement back-end Golang docker compose healthcheck ne s'est pas terminé et une erreur s'est produite et n'a pas pu être démarré

docker compose healthcheck ne s'est pas terminé et une erreur s'est produite et n'a pas pu être démarré

Feb 06, 2024 am 08:50 AM
overflow

docker compose healthcheck 未退出并出现错误无法启动

Contenu de la question

J'ai ce fichier de composition :

version: "3"
services:
  app:
    build: .
    ports:
      - 8080:8080
    volumes:
      - "./:/src"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8080/fail-health-check || exit 1"]
      interval: 5s
      timeout: 5s
      retries: 1
    command: ["go", "run", "main.go"]
Copier après la connexion

Fichier Docker :

FROM golang:1.21 as builder

WORKDIR /src

COPY go.mod go.sum ./
RUN go mod download
Copier après la connexion

Lorsque j'exécute Docker Compose, les vérifications de l'état de l'application continuent de s'exécuter. Je souhaite que le conteneur se ferme avec l'erreur Impossible de démarrer le conteneur.

code golangmain.go

package main

import (
    "fmt"
    "log"

    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
)

func main() {
  r := echo.New()
  r.Use(middleware.Logger())
  
  fmt.Println("start http server on port 8080")
  if err := r.Start(":8080"); err != nil {
    log.Fatal(err)
  }
}
Copier après la connexion

Voici l'application de connexion :

test_healthcheck_go_app-app-1  | {"time":"2023-11-14T04:08:42.450751594Z","id":"","remote_ip":"127.0.0.1","host":"localhost:8080","method":"GET","uri":"/fail-health-check","user_agent":"curl/7.88.1","status":404,"error":"code=404, message=Not Found","latency":26375,"latency_human":"26.375µs","bytes_in":0,"bytes_out":24}
Copier après la connexion

docker ps sortie

CONTAINER ID   IMAGE                         COMMAND            CREATED          STATUS                      PORTS                    NAMES
ff389f13ab1d   test_healthcheck_go_app-app   "go run main.go"   48 seconds ago   Up 46 seconds (unhealthy)   0.0.0.0:8080->8080/tcp   test_healthcheck_go_app-app-1
Copier après la connexion

Bonne réponse


  1. Votre application ne sait pas qu'elle s'exécute dans un conteneur.
  2. Votre processus principal (go run main.go)正在以 PID 1) est en cours d'exécution, vous devez arrêter le processus pour quitter le conteneur et le processus est protégé
  3. .

Comprenant ces deux faits, vous avez plusieurs possibilités :

  1. Installez Docker cli à l'intérieur du conteneur. Mappez ensuite le socket docker dans le conteneur et exécutez docker stop. Le mappage des sockets dans des conteneurs a des implications en matière de sécurité : procédez avec prudence.

  2. Courez ps -afx | 等命令grep 去 | awk '{print }' | xargs Kill -9 (对这个答案表示敬意),即特别是在您的 healthcheck 中,它可能看起来像 curl -f http:// /本地主机:8080/失败健康检查 || (ps -afx | grep go | awk '{print }' | xargs Kill -9)

  3. Mais à mon avis, ce dont vous avez vraiment besoin, c'est d'un système d'orchestration de conteneurs comme Kubernetes. Ce conseil peut être un peu excessif ou non. Cela dépend de votre plan de projet. Quoi qu’il en soit, cela vous aidera à gérer vos conteneurs en cours d’exécution de manière plus robuste.

Si vous souhaitez générer une erreur, cela dépend du pilote de journalisation que vous utilisez. Utilisez syslog 驱动程序,Docker 容器将日志写入 /var/log/syslog。因此,在退出之前,您可能需要 echo "Error text"/var/log/syslog.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le prix du Bitcoin depuis sa naissance 2009-2025 Le résumé le plus complet des prix historiques du BTC Le prix du Bitcoin depuis sa naissance 2009-2025 Le résumé le plus complet des prix historiques du BTC Jan 15, 2025 pm 08:11 PM

Le prix du Bitcoin depuis sa naissance 2009-2025 Le résumé le plus complet des prix historiques du BTC

Que faire si l'heure dans le coin inférieur droit de Windows 11 est révolue_Que faire si l'heure dans le coin inférieur droit de Windows 11 est révolue Que faire si l'heure dans le coin inférieur droit de Windows 11 est révolue_Que faire si l'heure dans le coin inférieur droit de Windows 11 est révolue May 06, 2024 pm 01:20 PM

Que faire si l'heure dans le coin inférieur droit de Windows 11 est révolue_Que faire si l'heure dans le coin inférieur droit de Windows 11 est révolue

Existe-t-il des forums communautaires ou des groupes de discussion sur les fonctions Java où je peux poser des questions et en discuter ? Existe-t-il des forums communautaires ou des groupes de discussion sur les fonctions Java où je peux poser des questions et en discuter ? Apr 28, 2024 pm 02:12 PM

Existe-t-il des forums communautaires ou des groupes de discussion sur les fonctions Java où je peux poser des questions et en discuter ?

Comment utiliser le code d'autres personnes en python Comment utiliser le code d'autres personnes en python May 05, 2024 pm 07:54 PM

Comment utiliser le code d'autres personnes en python

Que dois-je faire si l'heure sur mon ordinateur Win11 est toujours fausse ? Comment régler la mauvaise heure sur un ordinateur Windows 11 Que dois-je faire si l'heure sur mon ordinateur Win11 est toujours fausse ? Comment régler la mauvaise heure sur un ordinateur Windows 11 May 03, 2024 pm 09:20 PM

Que dois-je faire si l'heure sur mon ordinateur Win11 est toujours fausse ? Comment régler la mauvaise heure sur un ordinateur Windows 11

Types d'exceptions courants et leurs mesures de réparation dans le développement de fonctions Java Types d'exceptions courants et leurs mesures de réparation dans le développement de fonctions Java May 03, 2024 pm 02:09 PM

Types d'exceptions courants et leurs mesures de réparation dans le développement de fonctions Java

Que signifie le débordement en CSS Que signifie le débordement en CSS Apr 28, 2024 pm 03:15 PM

Que signifie le débordement en CSS

Personne ne s'occupe des comptes aléatoires de Douyin ? Puis-je faire appel une deuxième fois ? Personne ne s'occupe des comptes aléatoires de Douyin ? Puis-je faire appel une deuxième fois ? May 03, 2024 am 09:37 AM

Personne ne s'occupe des comptes aléatoires de Douyin ? Puis-je faire appel une deuxième fois ?

See all articles