itsource

도커 이미지의 로그를 보는 방법은 무엇입니까?

mycopycode 2023. 7. 31. 21:22
반응형

도커 이미지의 로그를 보는 방법은 무엇입니까?

도커 세계에서는 도커 컨테이너(실행 중인 이미지)에 대한 로그를 쉽게 볼 수 있습니다.그러나 이미지를 생성하는 동안 일반적으로 여러 명령을 실행합니다.예를 들어 노드 프로젝트의 npm 설치 명령입니다.이러한 명령에 대한 로그도 확인하는 것이 좋습니다.설명서에서 빠르게 검색했지만 도커 이미지에 대한 로그를 얻을 수 있는 방법을 찾지 못했습니다.가능합니까?

같은 문제를 가지고, 나는 그것을 사용하여 해결했습니다.

docker build --no-cache --progress=plain -t my-image .

업데이트 : 이 질문이 나왔기 때문에 빌드킷의 출력 변화를 보고 모두가 찾고 있는 것 같습니다.빌드킷에는 다음 옵션이 포함됩니다.docker build --help모두 보기):

      --build-arg list          Set build-time variables
      --cache-from strings      Images to consider as cache sources
  -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
      --no-cache                Do not use cache when building the image
  -o, --output stringArray      Output destination (format: type=local,dest=path)
      --platform string         Set platform if server is multi-platform capable
      --progress string         Set type of progress output (auto, plain, tty). Use plain to show container output (default "auto")
      --pull                    Always attempt to pull a newer version of the image
  -q, --quiet                   Suppress the build output and print image ID on success
  -t, --tag list                Name and optionally a tag in the 'name:tag' format
      --target string           Set the target build stage to build.

많은 사람들이 빌드킷과 함께 원하는 옵션은--progress=plain:

docker build -t my-image --progress=plain .

이전 빌드 출력을 보려면 환경 변수를 사용하여 빌드 키트를 사용하지 않도록 설정할 수 있지만, 사용하지 않는 빌드 단계, 동시 빌드 단계, 멀티 플랫폼 이미지 및 다음과 같은 기능에 대한 도커 파일의 새 구문을 건너뛸 수 있는 빌드 키트의 기능이 많기 때문에 이에 반대하는 것이 좋습니다.RUN --mount...):

DOCKER_BUILDKIT=0 docker build -t my-image .

OP는 빌드 로그를 이미지 자체에 포함하도록 요청하고 있습니다.일반적으로 이러한 로그는 이미지 외부에 저장하는 것이 좋습니다.

그렇긴 하지만, 그것을 위한 가장 쉬운 방법은 사용하는 것입니다.tee모든 명령 출력의 복사본을 로그 파일로 보냅니다.이미지에 첨부하려면 다음과 같은 방법으로 이미지 내부의 로그 파일에 실행 명령을 출력합니다.

RUN my-install-cmd | tee /logs/my-install-cmd.log

그런 다음 빠른 일회성 컨테이너를 실행하여 이러한 로그의 내용을 볼 수 있습니다.

docker run --rm my-image cat /logs/my-install-cmd.log

이미지에 로그를 첨부할 필요가 없는 경우 JHaris가 말하는 대로 빌드 명령을 변경하여 모든 빌드의 출력을 기록할 수 있습니다(실행 명령을 많이 변경하는 대신).

docker build -t my-image . | tee my-image.build.log

고전적인 도커 빌드 명령을 사용하여 사용하지 않고 빌드할 경우--rm=true그러면 당신은 모든 중간 컨테이너를 가지고 있고, 그것들 각각은 당신이 검토할 수 있는 로그를 가지고 있습니다.

docker logs $container_id

그리고 마지막으로, 이미지에 층의 역사가 있다는 것을 잊지 마세요.각 명령어의 출력은 표시되지 않지만 출력을 기록하지 않는 모든 명령어에 유용하며, 특히 캐시가 많이 사용되는 경우 각 계층의 빌드를 파악하는 데 유용합니다.

docker history my-image

사하는대를 사용하는 에.--progress=plain 변수 환변를사수있다습니도용을 할 수도 있습니다.BUILDKIT_PROGRESS

다음과 같이 사용할 수 있습니다.

export BUILDKIT_PROGRESS=plain
docker build ....

참조: https://docs.docker.com/engine/reference/commandline/buildx_build/ #http:

사용 방법: https://github.com/jcalles/docker-wtee
설명서를 읽고 피드백을 주세요.
아니면...
실행 중인 컨테이너에서 로그를 가져와야 하고 컨테이너에 볼륨이 노출된 경우 다음을 실행합니다.

docker run --rm -it --name testlogs --link <CONTAINERNAME/ID> --network CONTAINERNETWORK -p PORT:8080 --volumes-from CONTAINERNAME/ID  javiercalles/wtee sh

언급URL : https://stackoverflow.com/questions/37832575/how-to-view-logs-for-a-docker-image

반응형