도커 이미지 내용을 보는 방법
도커 풀을 수행하여 다운로드 된 이미지를 나열 할 수 있습니다. 이 이미지의 내용을보고 싶습니다. 인터넷에서 검색했지만 정답은 없습니다.
해당 이미지를 사용하여 대화식 쉘 컨테이너를 실행하고 해당 이미지의 컨텐츠를 탐색 할 수 있습니다.
예를 들어 :
docker run -it image_name sh
또는 이미지가 어떻게 만들어 졌는지 확인하려면의 단계를 의미합니다 Dockerfile
.
docker image history --no-trunc image_name > image_history
단계가 image_history
파일에 로그인됩니다 .
entrypoint
구성된 이미지의 경우 docker run -it --entrypoint sh 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 save nginx > nginx.tar
tar -xvf nginx.tar
다음과 같은 파일이 있습니다.
- manifest.json – 파일 시스템 계층과 컨테이너 속성이있는 json 파일의 이름을 설명합니다.
- .json – 컨테이너 속성
- – 각“layerid”디렉토리에는 해당 레이어와 연관된 레이어 속성 및 파일 시스템을 설명하는 json 파일이 있습니다. Docker는 컨테이너 이미지를 레이어로 저장하여 이미지에서 레이어를 재사용하여 저장 공간을 최적화합니다.
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
또는
다이빙 을 사용 하여 TUI로 대화식으로 이미지 컨텐츠를 볼 수 있습니다
https://github.com/wagoodman/dive
이미지의 자세한 내용을 나열하려면 컨테이너에서 종료하자마자 제거 해야하는 docker run --rm image/name ls -alR
곳 에서 실행해야합니다 --rm
.
다음과 같이 간단한 것을 시도해 볼 수 있습니다.
docker image inspect image_id
이것은 Docker 버전에서 작동했습니다.
DockerVersion": "18.05.0-ce"
Windows 용 Docker EE (Hyper-V Server 2016의 17.06.2-ee-6) C:\ProgramData\docker\windowsfilter\
를 사용하면 호스트 컨테이너의 경로 에서 Windows 컨테이너의 모든 내용을 검사 할 수 있습니다 .
특별한 장착이 필요하지 않습니다.
폴더 접두사는 docker ps -a
출력 에서 컨테이너 ID로 찾을 수 있습니다 .
컨테이너 이미지를 스캔하는 데 사용할 수있는 Anchore라는 무료 오픈 소스 도구가 있습니다. 이 명령을 사용하면 컨테이너 이미지의 모든 파일을 나열 할 수 있습니다
anchore-cli 이미지 컨텐츠 myrepo / app : 최신 파일
https://anchore.com/opensource/
도커 이미지 살펴보기 !
종류 쉘의 거기에 무엇인지 그림
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
실행 한 후 제거 컨테이너를 의미합니다.
참고 URL : https://stackoverflow.com/questions/44769315/how-to-see-docker-image-contents
'Programing' 카테고리의 다른 글
사람들은 왜 루비가 느리다고 말합니까? (0) | 2020.05.16 |
---|---|
PHP로 문자열의 처음 4자를 제거 (0) | 2020.05.16 |
jq를 사용하여 객체의 변수 값을 기준으로 객체를 선택하십시오. (0) | 2020.05.16 |
N "고유 한"색상을 자동으로 생성하는 방법은 무엇입니까? (0) | 2020.05.16 |
문자열에 단일 문자가 나타나는지 어떻게 확인할 수 있습니까? (0) | 2020.05.16 |