도커 이미지 컨텐츠를 보는 방법
도커 풀을 했고 다운로드 받은 이미지를 나열할 수 있습니다.이 이미지의 내용을 보고 싶습니다.인터넷에서 검색을 했지만 정확한 답은 없었습니다.
이미지에 셸이 포함되어 있는 경우 해당 이미지를 사용하여 대화형 셸 컨테이너를 실행하고 해당 이미지에 있는 콘텐츠를 탐색할 수 있습니다.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와 상호작용적으로 이미지 컨텐츠를 볼 수 있습니다.
https://github.com/wagoodman/dive
도커 이미지 탐색 중!
- 의 포탄이 합니다.
bash
아니면sh
...
합니다.docker inspect name-of-container-or-image
.entrypoint
아니면cmd
JSON 리턴즈에서.
- 그러면 다음을 수행합니다.
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
출구가 컨테이너를 형성하는 즉시 제거하는 것을 의미합니다.
컨테이너를 시작하지 않고 이미지에 파일을 나열하려면:
docker create --name listfiles <image name>
docker export listfiles | tar -t
docker rm listfiles
저는 이 도구를 사용해 보았습니다 - https://github.com/wagoodman/dive 도커 이미지의 내용을 탐색하는 것이 꽤 도움이 된다는 것을 알았습니다.
이미지를 실행하지 않고 이미지 내용을 확인하려면 다음 작업을 수행할 수 있습니다.
$ 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)가 있었습니다.
- 먼저 액세스하려는 레포를 tar 파일로 저장해야 합니다.제 경우에는 명령어가 - docker save .dkr.ecr.us-east-1.amazonaws.com/ <name_of_repo>:image-tag > saved-repo.tar와 같이 되었습니다.
- tar -xvf saved -repo.tar 명령을 사용하여 파일을 UNTAR합니다.많은 폴더와 파일을 볼 수 있었습니다.
- 이제 찾으려는 코드가 포함된 파일을 찾아 보십시오(코드의 일부를 알고 있는 경우) 파일 검색을 위한 명령어 - 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
'programing' 카테고리의 다른 글
e에서 2조 자리까지 계산하는 가장 빠른 방법은 무엇입니까? (0) | 2023.10.01 |
---|---|
jQuery를 사용하여 "삭제" 키 누르기 (0) | 2023.10.01 |
jQuery를 사용하여 '어떤' ajax 요청이 완료되는지 탐지하려면 어떻게 해야 합니까? (0) | 2023.10.01 |
jQuery를 사용하여 이미지에서 마우스 클릭의 X/Y 좌표 가져오기 (0) | 2023.10.01 |
C 코드를 사용하여 ifconfig와 동일한 정보를 가져옵니다. (0) | 2023.10.01 |