Heim > Backend-Entwicklung > Golang > Docker Compose Healthcheck wurde nicht beendet, es ist ein Fehler aufgetreten und konnte nicht gestartet werden

Docker Compose Healthcheck wurde nicht beendet, es ist ein Fehler aufgetreten und konnte nicht gestartet werden

WBOY
Freigeben: 2024-02-06 08:50:03
nach vorne
1030 Leute haben es durchsucht

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

Frageninhalt

Ich habe diese Erstellungsdatei:

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"]
Nach dem Login kopieren

Docker-Datei:

FROM golang:1.21 as builder

WORKDIR /src

COPY go.mod go.sum ./
RUN go mod download
Nach dem Login kopieren

Wenn ich Docker Compose ausführe, werden die Gesundheitsprüfungen der Anwendung weiterhin ausgeführt. Ich möchte, dass der Container mit der Fehlermeldung „Container konnte nicht gestartet werden“ beendet wird.

Golang-Codemain.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)
  }
}
Nach dem Login kopieren

Hier ist die Login-App:

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}
Nach dem Login kopieren

docker ps Ausgabe

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
Nach dem Login kopieren

Richtige Antwort


  1. Ihre Anwendung weiß nicht, dass sie in einem Container ausgeführt wird.
  2. Ihr Hauptprozess (go run main.go)正在以 PID 1) läuft, Sie müssen den Prozess stoppen, um den Container zu verlassen, und der Prozess ist geschützt

Wenn Sie diese beiden Fakten verstehen, haben Sie mehrere Möglichkeiten:

  1. Installieren Sie Docker CLI im Container. Ordnen Sie dann den Docker-Socket dem Container zu und führen Sie ihn aus docker stop. Das Zuordnen von Sockets zu Containern hat Auswirkungen auf die Sicherheit. Gehen Sie daher mit Vorsicht vor.

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

  3. Aber meiner Meinung nach braucht man wirklich ein Container-Orchestrierungssystem wie Kubernetes. Dieser Rat kann etwas viel sein oder auch nicht. Hängt von Ihrem Projektplan ab. Unabhängig davon wird es Ihnen dabei helfen, Ihre laufenden Container robuster zu verwalten.

Ob Sie einen Fehler generieren möchten, hängt davon ab, welchen Protokollierungstreiber Sie verwenden. Verwenden Sie syslog 驱动程序,Docker 容器将日志写入 /var/log/syslog。因此,在退出之前,您可能需要 echo "Error text"/var/log/syslog.

Das obige ist der detaillierte Inhalt vonDocker Compose Healthcheck wurde nicht beendet, es ist ein Fehler aufgetreten und konnte nicht gestartet werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage