ฉันดึงนักเทียบท่าและสามารถแสดงรายการรูปภาพที่ดาวน์โหลด ฉันต้องการดูเนื้อหาของภาพนี้ ค้นหาบนเน็ต แต่ไม่มีคำตอบที่ตรง
ฉันดึงนักเทียบท่าและสามารถแสดงรายการรูปภาพที่ดาวน์โหลด ฉันต้องการดูเนื้อหาของภาพนี้ ค้นหาบนเน็ต แต่ไม่มีคำตอบที่ตรง
คำตอบ:
คุณสามารถเรียกใช้เชลล์คอนเทนเนอร์แบบโต้ตอบโดยใช้รูปภาพนั้นและสำรวจเนื้อหาที่มีรูปภาพ
ตัวอย่างเช่น
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".
นี่ไม่ใช่การกำหนดค่าที่ผิดปกติ รูปภาพขั้นต่ำสุดจำนวนมากมีเพียงไบนารีที่จำเป็นในการสนับสนุนบริการเป้าหมาย โชคดีที่มีกลไกสำหรับการสำรวจระบบไฟล์ภาพที่ไม่ได้ขึ้นอยู่กับเนื้อหาของภาพ วิธีที่ง่ายที่สุดน่าจะเป็น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
มีความหมายว่า "ให้ฉันรหัสของคอนเทนเนอร์นักเทียบท่าล่าสุด" คุณสามารถแทนที่ด้วยชื่อคอนเทนเนอร์หรือรหัสที่ชัดเจน
คุณไม่ควรเริ่มคอนเทนเนอร์เพื่อดูเนื้อหารูปภาพ ตัวอย่างเช่นคุณอาจต้องการค้นหาเนื้อหาที่เป็นอันตรายไม่ทำงาน ใช้ "สร้าง" แทน "เรียกใช้";
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
มิฉะนั้นตามเอกสารนั้นจะมี "เลเยอร์ผู้ปกครองทั้งหมดและแท็ก + รุ่นทั้งหมด"
ในการแสดงรายการเนื้อหาโดยละเอียดของรูปภาพคุณจะต้องเรียกใช้ในdocker run --rm image/name ls -alR
ที่ซึ่ง--rm
หมายความว่าจะลบออกทันทีที่ออกจากคอนเทนเนอร์
ls
อยู่และในPATH
สำรวจภาพ DOCKER !
คิดออกว่าชนิดของเปลือกหอยที่อยู่ในนั้น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
หรือ หรือเครื่องมือทั่วไปใด ๆ เลย
เราสามารถลองแบบง่ายกว่านี้ได้ดังนี้:
docker image inspect image_id
สิ่งนี้ทำงานในเวอร์ชัน Docker:
DockerVersion": "18.05.0-ce"
ด้วย Docker EE สำหรับ Windows (17.06.2-ee-6 บน Hyper-V Server 2016) เนื้อหาทั้งหมดของ Windows Containers สามารถตรวจสอบได้ที่C:\ProgramData\docker\windowsfilter\
พา ธ ของโฮสต์ระบบปฏิบัติการ
ไม่จำเป็นต้องติดตั้งพิเศษ
คำนำหน้าโฟลเดอร์สามารถพบได้โดยรหัสภาชนะจากdocker ps -a
เอาท์พุท
มีเครื่องมือโอเพนซอร์สฟรีที่เรียกว่า Anchore ที่คุณสามารถใช้ในการสแกนภาพภาชนะ คำสั่งนี้จะช่วยให้คุณสามารถแสดงรายการไฟล์ทั้งหมดในภาพภาชนะ
เนื้อหาภาพ anchore-cli myrepo / app: ไฟล์ล่าสุด