도커 이미지에서 파일을 추출하시겠습니까?

도커 이미지에서 파일을 추출하시겠습니까?

이미지를 실행하지 않고 Docker 이미지에서 파일을 추출하고 싶습니다.

docker save옵션은 특정 파일의 압축을 풀기에는 너무 큰 파일을 저장하므로 현재 나에게는 실행 가능한 옵션이 아닙니다.

답변1

다음 명령을 사용하여 이미지에서 파일을 추출할 수 있습니다.

container_id=$(docker create "$image")
docker cp "$container_id:$source_path" "$destination_path"
docker rm "$container_id"

~에 따르면docker create 문서, 컨테이너를 실행하지 않습니다.

docker create명령은 지정된 이미지에 쓰기 가능한 컨테이너 레이어를 생성하고 지정된 명령을 실행할 수 있도록 준비합니다. 그러면 컨테이너 ID가 에 인쇄됩니다 STDOUT. 이는 docker run -d컨테이너가 시작되지 않은 경우와 유사합니다. 그러면 docker start <container_id>언제든지 이 명령을 사용하여 컨테이너를 시작할 수 있습니다 .


참고로 (이전 답변) 이미지에서 파일을 추출하는 덜 효율적인 방법은 다음과 같습니다.

docker run some_image cat "$file_path" > "$output_path"

답변2

docker save전체 출력을 저장할 수 없는 경우 파이프를 사용하여 필요한 파일을 추출할 수 있습니다.

불행히도 출력은 "tar of tars"이므로 약간 반복적인 프로세스가 될 수 있습니다.

지금 파일을 추출해야 할 때 내가 한 일은 다음과 같습니다.

  1. 관심 있는 파일의 가장 최근에 변경된 이미지 버전(이 작업을 수행하는 방법은 이미지에 따라 다를 수 있음) 및 생성/저장 날짜를 확인합니다.

  2. 다음 명령을 사용하여 명령 출력에서 ​​전체 디렉터리를 가져옵니다 docker save.

    도커 저장 IMAGE_NAME |tar-tvf-

  3. layer.tar이 명령의 출력에서 ​​1단계에서 결정한 이미지 날짜와 일치하는 파일을 찾습니다. ( | grep layer.tar이 파일만 표시하도록 추가할 수 있습니다)

  4. 파일을 layer.tar표준 출력으로 추출하고 해당 디렉터리를 가져옵니다.

    도커 저장 IMAGE_NAME | tar -xf - -O CHECKSUM_FROM_LIST/layer.tar | tar -xf - -O CHECKSUM_FROM_LIST/layer.tar -tvf-

  5. 원하는 파일이 나열되어 있는지 확인하고 이름을 찾으면 압축을 풉니다.

    docker save IMAGE_NAME | tar -xf - -O CHECKSUM_FROM_LIST/layer.tar | tar -xf - -O CHECKSUM_FROM_LIST/layer.tar | 문서

2/3단계에서 찾고 있는 날짜와 일치하는 파일이 여러 개 있는 경우 layer.tar올바른 파일을 찾을 때까지 각 파일에 대해 4단계를 반복해야 할 수도 있습니다.

위 명령의 대문자 텍스트를 상황에 맞는 올바른 이미지 이름, 체크섬 및 파일 이름으로 바꾸십시오.

답변3

위의 어느 것도 나에게 적합하지 않습니다. 전체 작업 명령은 다음과 같습니다.

docker run --rm --entrypoint /bin/sh image_name -c "cat /path/filename" > output_filename

따옴표 없이 파일 이름을 cat전달하지 않으므로 무엇을 표시할지 알 수 없습니다. 또한 명령이 완료된 후 컨테이너를 삭제하는 것이 좋습니다.

답변4

컨테이너를 생성하지도 않고 수동으로 레이어를 조작하지 않아도 되는 또 다른 옵션은 다음과 같습니다. 하지만 여러 레이어에 관심 있는 일부 파일이 포함되어 있는 경우 흥미로울 수 있습니다.

$ docker image save IMAGE_NAME | tar --extract --wildcards --to-stdout '*/layer.tar' | tar --extract --ignore-zeros --verbose FILE_OR_DIRECTORY

관련 정보