사용자 서비스 파일을 사용하여 nginx podman 컨테이너를 시작할 수 없습니다.

사용자 서비스 파일을 사용하여 nginx podman 컨테이너를 시작할 수 없습니다.

서비스의 일부로 실행되는 nginx 컨테이너가 있습니다. 이것은 nginx를 포함한 모든 컨테이너를 시작하는 데 사용되는 함수 코드입니다.

    if [[ ! -s ${SCRIPT_DIR}/.container-info-patches.txt ]]; then
      patches_echo "Patches must be set up before running. Please run 'patches setup' first."
      exit 1
    fi

    all_containers_running=false

    while true; do
      all_containers_running=true

      for container in "${containers[@]}"; do
        patches_echo "Checking container status: $container"
        status=$(podman container inspect -f '{{.State.Status}}' "$container" 2>/dev/null)

        if [[ "$status" != "running" ]]; then
          all_containers_running=false

          patches_echo "Starting container: $container"
          podman start "$container" >/dev/null 2>&1 || patches_echo "Container not found: $container" --error

          if [[ $container == "patches-nginx" ]]; then
            check_nginx_status
          elif [[ $container == "patches-psql" ]]; then
            wait_for_postgresql
          fi
        fi
      done

      if [[ $all_containers_running == "true" ]]; then
        break
      fi

      if [[ $CONTINUOUS != "TRUE" ]]; then
        break
      fi

      sleep 1
    done

수동으로 실행하면 정상적으로 실행되고 모든 컨테이너가 시작됩니다. 부팅 시 실행하기 위해 linger를 사용하여 설정한 사용자 시스템 파일이 있습니다. 모든 컨테이너를 시작합니다.와는 별개로nginx에는 문제가 없습니다. podman logs patches-nginx재부팅 후 로그를 확인 하면 다음이 표시됩니다.

}[grant@patches ~]$podman logs patches-nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: IPv6 listen already enabled
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up

        10.89.0.5 - - [02/Jun/2023:18:48:43 +0000]
        "GET / HTTP/1.1" 400 255
        "-" "curl/7.76.1"
        Certificate: "-"
        Client Key: "-"

이것은 400을 발행한 단일 요청을 받았다는 사실 외에는 행복했고 종료할 이유가 없었다는 것을 말해줍니다. 종료되더라도 nginx 시작을 60초 동안 지속적으로 재시도하도록 앞서 언급한 시작 기능을 특별히 설계했습니다. 정말 이상한 점은 코드가 종료되고 60초 창 아래에서 계속 시작하려고 시도하는 코드를 무시한다는 것입니다.

마찬가지로, 서비스 파일이 수동으로 실행되어야 하는 것과 똑같은 코드를 실행하면 모든 것이 예상한 대로 정확하게 작동합니다. 즉, 로그인하고 실행하면 patches.sh start --continuous표면적으로 모든 서비스 파일이 수행해야 하는 nginx를 포함하여 모든 것이 즉시 나타납니다.

서비스 파일에 관한 어떤 것이 작업을 엉망으로 만들고 있는데 그것이 무엇인지 알 수 없습니다.와는 별개로nginx는 예상대로 정확하게 작동합니다.

서비스 파일은 간단합니다.

[Unit]
Description=Patches Service
Wants=network.target
After=network.target
Requires=user@${USER}.service

[Service]
Type=oneshot
TimeoutStartSec=10min
ExecStart=/bin/bash ${SCRIPT_DIR}/patches.sh start --continuous

[Install]
WantedBy=default.target

답변1

이것은 대답의 일부입니다. 무언가가 SIGTERM을 nginx로 보내고 있습니다. 나는 확인했다도커 파일그리고 눈에 띄는 건강 검진이나 그것을 죽일 수 있는 것들을 보지 마십시오.

덕분에 이해가 되네요유용한 답변. 나는 httpd 컨테이너에서 동일한 동작을 보고 직관적으로 그것과 nginx를 모두 교체했으며 --restart-always이제 둘 다 작동합니다.

이 문제는 다른 사람에게 맡기겠습니다. 아마도 SIGTERM의 원인이 무엇인지 알아낼 수 있을 것입니다.

관련 정보