>백엔드 개발 >Golang >docker compose healthcheck가 종료되지 않아 오류가 발생하여 시작할 수 없습니다.

docker compose healthcheck가 종료되지 않아 오류가 발생하여 시작할 수 없습니다.

WBOY
WBOY앞으로
2024-02-06 08:50:031016검색

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

질문 내용

다음 작성 파일이 있습니다:

으아아아

도커파일:

으아아아

docker compose를 실행하면 애플리케이션의 상태 확인이 계속 실행됩니다. 컨테이너를 시작할 수 없습니다.라는 오류로 인해 컨테이너가 종료되기를 원합니다.

골랑코드main.go

으아아아

로그인 앱은 다음과 같습니다:

으아아아

docker ps출력

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"]

정답


  1. 애플리케이션은 자신이 컨테이너에서 실행되고 있다는 사실을 모릅니다.
  2. 메인 프로세스(go run main.go)正在以 PID 1)가 실행 중입니다. 컨테이너를 종료하려면 프로세스를 중지해야 하며 프로세스는 보호됩니다.
이 두 가지 사실을 이해하면 여러 가지 가능성이 있습니다.

  1. 컨테이너 내부에 docker cli를 설치합니다. 그런 다음 도커 소켓을 컨테이너에 매핑하고

    를 실행합니다. 소켓을 컨테이너에 매핑하면 보안에 영향을 미치므로 주의해서 진행하세요. docker stop

  2. 달려

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

  3. 하지만 제 생각에는 정말 필요한 것은 Kubernetes와 같은 컨테이너 오케스트레이션 시스템입니다. 이 조언은 약간 많을 수도 있고 아닐 수도 있습니다. 프로젝트 계획에 따라 다릅니다. 그럼에도 불구하고 실행 중인 컨테이너를 보다 강력하게 관리하는 데 도움이 됩니다.

오류를 생성하려는 경우 사용하는 로깅 드라이버에 따라 다릅니다.

를 사용하세요. syslog 驱动程序,Docker 容器将日志写入 /var/log/syslog。因此,在退出之前,您可能需要 echo "Error text"/var/log/syslog

위 내용은 docker compose healthcheck가 종료되지 않아 오류가 발생하여 시작할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제