도커를 가져 와서 다운로드 한 이미지를 나열 할 수 있습니다. 이 이미지의 내용을보고 싶습니다. 인터넷에서 검색했지만 정답은 없습니다.
도커를 가져 와서 다운로드 한 이미지를 나열 할 수 있습니다. 이 이미지의 내용을보고 싶습니다. 인터넷에서 검색했지만 정답은 없습니다.
답변:
해당 이미지를 사용하여 대화식 쉘 컨테이너를 실행하고 해당 이미지의 컨텐츠를 탐색 할 수 있습니다.
예를 들어 :
docker run -it image_name sh
또는 entrypoint
docker run -it --entrypoint sh image_name
또는 이미지가 어떻게 만들어 졌는지 확인하려면의 단계를 의미합니다 Dockerfile
.
docker image history --no-trunc image_name > image_history
단계가 image_history
파일에 로그인됩니다 .
docker run -it --entrypoint cmd <image_name>
하면 작동합니다.
여기에 허용되는 대답은 문제가 있습니다. 이미지에 대화 형 쉘이있을 것이라는 보장이 없기 때문입니다. 예를 들어, 무인 항공기 / 무인 항공기의 이미지는 하나의 명령에 포함 /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".
이것은 드문 구성이 아닙니다. 많은 최소 이미지에는 대상 서비스를 지원하는 데 필요한 바이너리 만 포함되어 있습니다. 다행히도 이미지의 내용 에 의존하지 않는 이미지 파일 시스템을 탐색하는 메커니즘이 있습니다 . 컨테이너 파일 시스템을 tar 아카이브로 docker export
내보내는 명령 이 가장 쉬운 방법 일 것입니다 . 따라서 컨테이너를 시작하십시오 (실패 여부는 중요하지 않음).
$ 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를 부여"가 의미합니다. 이를 명시적인 컨테이너 이름 또는 ID로 바꿀 수 있습니다.
이미지 내용을보기 위해 컨테이너를 시작해서는 안됩니다. 예를 들어 악의적 인 콘텐츠를 찾고 실행하지 않는 것이 좋습니다. "run"대신 "create"를 사용하십시오.
docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$
docker export tmp_$$ > image-fs.tar
.
docker export tmp_$$ | tar t
작동하지 않습니다.
tar
가 컴퓨터에 설치되지 않았을 수 있습니다. 시도 tar --help
를 확인하기 위해.
-o
매개 변수를 사용하여 쓸 파일을 지정할 수 있습니다 . 예 docker export -o c:\temp\tmp_$$.tar tmp_$$
.
docker save nginx > nginx.tar
tar -xvf nginx.tar
다음과 같은 파일이 있습니다.
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
또는
다이빙 을 사용 하여 TUI로 대화식으로 이미지 컨텐츠를 볼 수 있습니다
docker
본질적으로 다른 유형의 아카이브 파일의 내용을보아야하는 이유는 무엇입니까?
docker save --output nginx.tar nginx:latest
그렇지 않으면 문서에 따르면 "모든 상위 레이어 및 모든 태그 + 버전"을 포함합니다.
도커 이미지 살펴보기 !
어떤 종류의 껍질이 있는지 알아 bash
내거나sh
또는 ...
먼저 이미지를 검사하십시오. docker inspect name-of-container-or-image
json return 을 entrypoint
찾거나 찾으십시오 cmd
.
그런 다음 수행하십시오. docker run --rm -it --entrypoint=/bin/bash name-of-image
일단 내부 : ls -lsa
또는 다음과 같은 다른 쉘 명령 :cd ..
-it
대화 형 및 tty 의 약자. 가 --rm
실행 한 후 제거 컨테이너를 의미합니다.
ls
. 또는 실제로 일반적인 도구입니다.
다음과 같이 간단한 것을 시도해 볼 수 있습니다.
docker image inspect image_id
이것은 Docker 버전에서 작동했습니다.
DockerVersion": "18.05.0-ce"
컨테이너 이미지를 스캔하는 데 사용할 수있는 Anchore라는 무료 오픈 소스 도구가 있습니다. 이 명령을 사용하면 컨테이너 이미지의 모든 파일을 나열 할 수 있습니다
anchore-cli 이미지 컨텐츠 myrepo / app : 최신 파일