programing

도커 이미지 컨텐츠를 보는 방법

megabox 2023. 10. 1. 19:23
반응형

도커 이미지 컨텐츠를 보는 방법

도커 풀을 했고 다운로드 받은 이미지를 나열할 수 있습니다.이 이미지의 내용을 보고 싶습니다.인터넷에서 검색을 했지만 정확한 답은 없었습니다.

이미지에 셸이 포함되어 있는 경우 해당 이미지를 사용하여 대화형 셸 컨테이너를 실행하고 해당 이미지에 있는 콘텐츠를 탐색할 수 있습니다.sh할 수 음,음ash조개 껍질일 수도 있어요.

예를 들어 다음과 같습니다.

docker run -it image_name sh

(Following).entrypoint

docker run -it --entrypoint sh image_name

를 합니다합니다.Dockerfile, 할 수 있습니다.

docker image history --no-trunc image_name > image_history

가 됩니다.image_history일.

이미지 내용을 보기 위해서만 용기를 시작해서는 안 됩니다.예를 들어, 악성 콘텐츠를 실행하는 것이 아니라 찾아보는 것이 좋습니다."run" 대신 "create"를 사용합니다.

docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$

여기서 수용된 답변은 문제가 있습니다. 이미지에 어떤 종류의 상호작용 셸이 있다는 보장이 없기 때문입니다.예를 들어, 드론/드론 이미지는 하나의 명령에 포함됩니다./drone, 그리고 그것은.ENTRYPOINT따라서 이는 실패할 것입니다.

$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured        

그리고 이것은 실패할 것입니다.

$ docker run --rm -it --entrypoint sh drone/drone
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH".

이것은 드문 구성이 아닙니다. 많은 최소 이미지에는 대상 서비스를 지원하는 데 필요한 이진 파일만 포함되어 있습니다.다행히 이미지의 내용에 의존하지 않는 이미지 파일 시스템을 탐색하는 메커니즘이 있습니다.가장 쉬운 것은 아마도.docker export명령 - 컨테이너 파일 시스템을 tar 아카이브로 내보냅니다.따라서 컨테이너를 시작합니다(실패 여부는 중요하지 않습니다).

$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured        

으로.docker export을 에 tar:

$ docker export $(docker ps -lq) | tar tf -

docker ps -lq"최신 도커 컨테이너 아이디를 알려주세요"라는 뜻입니다.명시적인 컨테이너 이름 또는 ID로 대체할 수 있습니다.

docker save nginx > nginx.tar
tar -xvf nginx.tar

다음 파일이 있습니다.

  • manifest.json – Container 속성이 있는 json 파일의 파일 시스템 계층과 이름을 설명합니다.
  • .json – 컨테이너 속성
  • – 각 "layerid" 디렉터리에는 계층 속성과 해당 계층과 연관된 파일 시스템을 설명하는 json 파일이 들어 있습니다.도커는 컨테이너 이미지를 레이어로 저장하여 이미지 전체에 레이어를 재사용함으로써 저장 공간을 최적화합니다.

https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/

오어

다이브를 사용하여 TUI와 상호작용적으로 이미지 컨텐츠를 볼 수 있습니다.

enter image description here

https://github.com/wagoodman/dive

도커 이미지 탐색 중!

  1. 의 포탄이 합니다.bash아니면sh...

합니다.docker inspect name-of-container-or-image

.entrypoint아니면cmdJSON 리턴즈에서.

  1. 그러면 다음을 수행합니다.docker run --rm -it --entrypoint=/bin/bash name-of-image

:ls -lsa어와 셸 을 입력합니다.cd ..

-it대화형의 약자로... TTY.--rm실행 후 컨테이너 제거를 나타냅니다.

와 같은 가 없는 ls아니면bash할 수 .Dockerfile공통 도구를 레이어로 간단히 추가합니다.
예제(알파인 리눅스):

RUN apk add --no-cache bash

이 그 에 접근할 수 없을 Dockerfile그런 다음 새로 만든 컨테이너에서 파일을 복사/extract하여 확인하기만 하면 됩니다.

docker create <image>  # returns container ID the container is never started.
docker cp <container ID>:<source_path> <destination_path>
docker rm <container ID>
cd <destination_path> && ls -lsah

하려면 .docker run --rm image/name ls -alR--rm출구가 컨테이너를 형성하는 즉시 제거하는 것을 의미합니다.

enter image description here

컨테이너를 시작하지 않고 이미지에 파일을 나열하려면:

docker create --name listfiles <image name>
docker export listfiles | tar -t
docker rm listfiles

는 이 도구를 사용해 보았습니다 - https://github.com/wagoodman/dive 도커 이미지의 내용을 탐색하는 것이 꽤 도움이 된다는 것을 알았습니다.

enter image description here

이미지를 실행하지 않고 이미지 내용을 확인하려면 다음 작업을 수행할 수 있습니다.

$ sudo bash
...
$ cd /var/lib/docker  # default path in most installations
$ find . -iname a_file_inside_the_image.ext
... (will find the base path here)

이는 현재 기본 BTRFS 스토리지 드라이버에서 정상적으로 작동합니다.

하나의 선형, 도커 실행 없음(위의 응답을 기준으로 함)

IMAGE=your_image docker create --name filelist $IMAGE command && docker export filelist | tar tf - | tree --fromfile . && docker rm filelist

동일하지만 트리 구조를 결과에 보고합니다.txt

IMAGE=your_image docker create --name filelist $IMAGE command && docker export filelist | tar tf - | tree --noreport --fromfile . | tee result.txt && docker rm filelist

우리는 다음과 같이 더 간단한 것을 시도할 수 있습니다.

docker image inspect image_id

도커 버전에서는 다음과 같이 작동했습니다.

DockerVersion": "18.05.0-ce"

아마도 이것은 아주 간단한 접근법은 아니지만 이것은 저에게 효과가 있었습니다.제가 보고 싶었던 ECR Repo(Amazon Container Service Repository)가 있었습니다.

  1. 먼저 액세스하려는 레포를 tar 파일로 저장해야 합니다.제 경우에는 명령어가 - docker save .dkr.ecr.us-east-1.amazonaws.com/ <name_of_repo>:image-tag > saved-repo.tar와 같이 되었습니다.
  2. tar -xvf saved -repo.tar 명령을 사용하여 파일을 UNTAR합니다.많은 폴더와 파일을 볼 수 있었습니다.
  3. 이제 찾으려는 코드가 포함된 파일을 찾아 보십시오(코드의 일부를 알고 있는 경우) 파일 검색을 위한 명령어 - grep -iRl "searching you want string" ./

이렇게 하면 파일에 도달할 수 있습니다.해당 파일도 tarrated가 될 수 있으므로 2단계에서 언급한 명령을 사용하여 해제합니다.

검색 중인 코드를 모르면 2단계 이후에 받은 파일을 모두 살펴야 하므로 다소 피곤할 수 있습니다.

좋은 일만 가득하시길요!

다음 코드를 실행하여 도커 이미지의 내용을 확인할 수 있습니다.

docker exec -it <image_id> sh

컨테이너 이미지를 스캔하는 데 사용할 수 있는 Anchore-CLI라는 무료 오픈 소스 도구가 있습니다.이 명령을 사용하면 컨테이너 이미지의 모든 파일을 나열할 수 있습니다.

anchore-cli image content myrepo/app:latest files

https://anchore.com/opensource/

편집: anchore.com 에서 더 이상 사용할 수 없습니다. https://github.com/anchore/anchore-cli 에서 설치할 수 있는 파이썬 프로그램입니다.

Windows용 Docker EE(Hyper-V Server 2016의 경우 17.06.2-ee-6)를 사용하면 Windows 컨테이너의 모든 내용을 다음에서 확인할 수 있습니다.C:\ProgramData\docker\windowsfilter\호스트 OS의 경로입니다.

특별한 장착은 필요 없습니다.

컨테이너 ID로 폴더 접두사를 찾을 수 있습니다.docker ps -a산출량.

언급URL : https://stackoverflow.com/questions/44769315/how-to-see-docker-image-contents

반응형