Maison > Article > développement back-end > docker compose healthcheck ne s'est pas terminé et une erreur s'est produite et n'a pas pu être démarré
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"]
Fichier Docker :
FROM golang:1.21 as builder WORKDIR /src COPY go.mod go.sum ./ RUN go mod download
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) } }
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}
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
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é Comprenant ces deux faits, vous avez plusieurs possibilités :
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.
Courez ps -afx | 等命令grep 去 | awk '{print }' | xargs Kill -9
(对这个答案表示敬意),即特别是在您的 healthcheck
中,它可能看起来像 curl -f http:// /本地主机:8080/失败健康检查 || (ps -afx | grep go | awk '{print }' | xargs Kill -9)
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!