ฉันจัดการเพื่อค้นหาคอนเทนเนอร์ภายใต้ไดเรกทอรี/var/lib/docker/containersแต่ฉันไม่พบภาพ
ไดเร็กทอรีและไฟล์/var/lib/dockerคืออะไร
ฉันจัดการเพื่อค้นหาคอนเทนเนอร์ภายใต้ไดเรกทอรี/var/lib/docker/containersแต่ฉันไม่พบภาพ
ไดเร็กทอรีและไฟล์/var/lib/dockerคืออะไร
คำตอบ:
เนื้อหาของ/var/lib/dockerไดเรกทอรีแตกต่างกันไปขึ้นอยู่กับคนขับเทียบท่าที่ใช้สำหรับการจัดเก็บ
โดยค่าเริ่มต้นนี้จะเป็นaufsแต่สามารถถอยกลับไปoverlay, overlay2, btrfs, devicemapperหรือzfsขึ้นอยู่กับการสนับสนุนเคอร์เนลของคุณ ในสถานที่ส่วนใหญ่จะเป็นaufsแต่RedHats devicemapperไปกับ
คุณสามารถตั้งโปรแกรมควบคุมการจัดเก็บข้อมูลที่มี-sหรือ--storage-driver=ตัวเลือกให้กับภูตเทียบท่า
/var/lib/docker/{driver-name} จะมีที่เก็บข้อมูลเฉพาะของไดรเวอร์สำหรับเนื้อหาของภาพ /var/lib/docker/graph/<id>ตอนนี้มีข้อมูลเมตาเกี่ยวกับภาพในjsonและlayersizeไฟล์เท่านั้นในกรณีของaufs:
/var/lib/docker/aufs/diff/<id> มีเนื้อหาไฟล์ของภาพ/var/lib/docker/repositories-aufsเป็นไฟล์ JSON ที่มีข้อมูลรูปภาพโลคัล docker imagesนี้สามารถดูได้ด้วยคำสั่งในกรณีของdevicemapper:
/var/lib/docker/devicemapper/devicemapper/data เก็บภาพ/var/lib/docker/devicemapper/devicemapper/metadata ข้อมูลเมตาdocker infoและหาสถานที่จริงที่เฉพาะเจาะจงเพื่อตั้งค่าของคุณ
Docker for Macมี 2 ภาพที่ 1.5 GB แต่ละคนและมีไดเรกทอรีไม่มี/var/lib docker
เมื่อใช้ Docker สำหรับ Mac แอปพลิเคชันปรากฏว่ามีการจัดเก็บคอนเทนเนอร์ภายใน VM ซึ่งอยู่ที่
~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
ปรับปรุง (ความอนุเคราะห์จากmmorin ):
ตั้งแต่วันที่ 15 มกราคม 2019 ดูเหมือนว่ามีเพียงไฟล์นี้:
~/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw
ที่มีดิสก์ Docker และรูปภาพและคอนเทนเนอร์ทั้งหมดที่อยู่ภายใน
ubuntu, nginx) หรือเป็นตำแหน่งสำหรับคอนเทนเนอร์ทั้งหมดหรือไม่ คำถามเดิมขอภาพไม่ภาชนะ ...
Docker for Macกับสองภาพ 1.5 GB และ~/Library/Containers/Data/com.docker.docker/Dataไม่มีไดเรกทอรีcom.docker.driver.amd64-linuxและไฟล์ขนาดใหญ่เพียงอย่างเดียวที่vms/0/Docker.rawมี 3.6 GB
du -hd1 ~/Library/Containers/com.docker.docker/Data/
นี่เป็นวิธีเก่าแก่ของการทำตอนนี้มันเปลี่ยนไป ไม่ต้องสนใจคำตอบนี้ตั้งแต่ปี 2019
ในกรณีพิเศษของ Mac OS X หรือ Windows โดยใช้ boot2docker รูปภาพ Docker ของคุณจะถูกเก็บไว้ใน VirtualBox VM ที่จัดการโดย boot2docker
VM นี้จะถูกเก็บไว้ในตำแหน่งปกติของภาพ VirtualBox:
OS X: ~/VirtualBox VMs/boot2docker-vm
ของ windows: %USERPROFILE%/VirtualBox VMs/boot2docker-vm
คุณสามารถรีเซ็ตได้โดยเรียกใช้ (คำเตือน: สิ่งนี้จะทำลายภาพทั้งหมดที่คุณสร้างและดาวน์โหลดจนถึงตอนนี้):
boot2docker down
boot2docker destroy
boot2docker init
boot2docker up
สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณเก็บรูปภาพขั้นกลางไว้จำนวนมากเมื่อสร้าง / แก้ไขข้อบกพร่องของบิลด์โดยไม่ใช้ตัวเลือก --rm ที่มีประโยชน์ฉันพูดถึงพวกมันที่นี่เพื่อการอ้างอิง: การใช้:
docker build -t webapp --rm=true --force-rm=true .
แทน:
docker build -t webapp .
%USERPROFILE%\.docker\machine\machines (โปรดทราบจุดหยุดเต็มรูปแบบในเส้นทาง)
C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
จริงๆแล้วอิมเมจ Docker จะถูกเก็บไว้ในสองไฟล์ดังที่แสดงโดยคำสั่งต่อไปนี้
$ docker info
แฟ้มข้อมูล:
/var/lib/docker/devicemapper/devicemapper/dataไฟล์ข้อมูลเมตา:
/var/lib/docker/devicemapper/devicemapper/metadata
docker infoมีประโยชน์มาก แต่ผลลัพธ์Docker Root Dir: /var/lib/dockerไม่ได้ระบุตำแหน่งที่เก็บภาพ (ดูคำตอบเฉพาะสำหรับ Mac ด้านบน)
ใน 'Docker for Windows' ที่เพิ่งเปิดตัวซึ่งใช้ Hyper-V ข้อมูลจะอยู่ในฮาร์ดดิสก์เสมือนของ Docker:
C: \ Users \ Public \ Documents \ Hyper-V \ ฮาร์ดดิสก์เสมือน \ MobyLinuxVM.vhdx
คุณยังสามารถเปิด 'Hyper-V Manager' เพื่อเข้าถึง Docker / MobyLinuxVM
C:\ProgramData\docker\windowsfilterไว้ ข้อมูลเพิ่มเติม: stackoverflow.com/a/39971954/188740
ภาพจะถูกเก็บไว้ใน /var/lib/docker/graph/<id>/layerภาพจะถูกเก็บไว้ใน
โปรดทราบว่ารูปภาพต่างจากภาพหลักเท่านั้น ID หลักจะถูกเก็บไว้พร้อมกับข้อมูลเมตาของภาพ/var/lib/docker/graph/<id>/jsonรหัสผู้ปกครองจะถูกเก็บไว้กับเมตาดาต้าของภาพ
เมื่อคุณdocker runมีภาพ AUFS จะ 'รวม' เลเยอร์ทั้งหมดไว้ในระบบไฟล์เดียวที่ใช้งานได้
บน Ubuntu คุณสามารถ "เล่น" ด้วยภาพที่กำลังรัน
sudo baobab /var/lib/docker
ที่จริงแล้วรูปภาพต่าง ๆ จะถูกเก็บไว้ภายใน /var/lib/docker/aufs/diff

สำหรับคนที่ใช้กล่องเครื่องมือนักเทียบท่า (ที่ใช้เครื่องนักเทียบท่า) คำตอบที่เกี่ยวข้องกับ boot2docker บน Mac OS X นั้นไม่ถูกต้อง VM นักเทียบท่าเครื่องเรียกว่า "default" และมีอยู่ใน/Users/<username>/.docker/machine/machines/default/ไดเรกทอรี
ในDocker สำหรับ Windows (เนทิฟ Windows) ที่เก็บคอนเทนเนอร์เริ่มต้นอยู่ที่:
> docker info
...
Docker Root Dir: C:\ProgramData\Docker
...
docker buildคำสั่ง & ฉันไม่เห็นไฟล์ที่ฉันคิดว่าเป็นไฟล์รูปภาพ ฉันเห็นบางโฟลเดอร์และไฟล์ข้อความบางไฟล์ (เช่น service.txt) ไฟล์ประเภทใดที่docker buildสร้างไฟล์นามสกุลอะไร
หากคุณใช้ Docker สำหรับ MAC (ไม่ใช่boot2docker) แสดงว่าเป็นตำแหน่งนั้น/Users/<</>UserName></>/Library/Containers/com.docker.docker/Data/
jasper@~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux $ ls -lh | grep Docker -rw-r--r--@ 1 jasper staff 6.3G May 25 19:20 Docker.qcow2ฉันพบภาพ แต่นั่นไม่ใช่ตู้คอนเทนเนอร์ ไม่เห็นพวกเขาในไดเรกทอรีข้อมูลนี้จริงๆ ..
ตามคำตอบที่นี่หากคุณใช้ Mac จะอยู่ที่
/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
ขยายคำตอบของ Tristan ใน Windows ด้วย Hyper-V คุณสามารถย้ายภาพด้วยขั้นตอนเหล่านี้จาก matthuisman:
ใน Windows 10
- หยุดนักเทียบท่า ฯลฯ
- พิมพ์ "Hyper-V Manager" ในกล่องค้นหาแถบงานและเรียกใช้
- เลือกพีซีของคุณในบานหน้าต่างด้านซ้าย (เหมืองเรียกว่า DESKTOP-CBP **)
- คลิกขวาที่เครื่องเสมือนที่ถูกต้อง (Mine เรียกว่า MobyLinuxVM)
- เลือก "ปิด" (หากกำลังทำงาน)
- คลิกขวาอีกครั้งแล้วเลือก "ย้าย"
- ทำตามคำแนะนำ
docker buildคำสั่ง ฉันใช้คอมพิวเตอร์ Windows 10 ฉันมองหาฮาร์ดดิสก์ C: \ Users \ Public \ Documents \ Hyper-V \ Virtual แต่สิ่งที่ฉันเห็นก็คือ MobyLinuxVM.vhdx ภาพที่จัดเก็บจริงอยู่ที่ไหน
หากคุณทราบว่า Docker ยังคงทำงานใน VM เส้นทางของระบบจะสัมพันธ์กับ VM ไม่ใช่จากระบบ Mac Osx ตามที่ระบุว่าทั้งหมดมีอยู่ในไฟล์ VM:
/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
ลองเรียกใช้อิมเมจอัลไพน์ด้วยตัวเลือกโวลุ่มนี้และคำสั่ง ls คุณสามารถแสดงรายการโฮสต์ VM:
นักเทียบท่าวิ่ง --rm -it -v /: / vm-root อัลไพน์: edge ls -l / vm-root
หลังจากนี้ให้ลอง:
ทำงานนักเทียบท่า --rm -it -v /: / vm-root อัลไพน์: edge ls -l / vm-root / var / lib / docker
ตอนนี้คุณสามารถแสดงรายการโฟลเดอร์นักเทียบท่าจากโฮสต์ VM
ผมใช้ boot2docker สำหรับเทียบท่าบน Mac OSX /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdkเพื่อให้ภาพที่ถูกจัดเก็บลงใน
ฉันสามารถตอบคำถามนี้สำหรับผู้ใช้ Ubuntu เท่านั้น:
ไดเรกทอรีรากของนักเทียบท่าสามารถพบได้เมื่อคุณเรียกใช้คำสั่ง docker info
ไดเรกทอรีของนักเทียบท่าจะได้รับในบรรทัดนี้: " Docker Root Dir: /var/lib/docker"
เกี่ยวกับอิมเมจของ Docker รูปภาพเหล่านั้นจะถูกเก็บไว้ในไดเรกทอรี Docker:
/var/lib/docker/aufs/diff/
โปรดจำไว้ว่าสิ่งเหล่านี้ไม่เหมือนกันในทุกรุ่นของนักเทียบท่า ขณะนี้ฉันใช้ 1.12.3
ใช้docker infoคำสั่งเพื่อแสดงข้อมูลทั่วทั้งระบบและตำแหน่งอาจแตกต่างกันไป
ข้อมูลเพิ่มเติมสามารถแสดงได้เช่นชื่อพูลไฟล์ข้อมูลไฟล์ข้อมูลเมตาพื้นที่ข้อมูลที่ใช้พื้นที่ข้อมูลทั้งหมดพื้นที่ข้อมูลเมตาที่ใช้และพื้นที่ข้อมูลเมตาทั้งหมดขึ้นอยู่กับไดรเวอร์อุปกรณ์จัดเก็บที่ใช้งาน
ไฟล์ข้อมูลเป็นที่จัดเก็บภาพและไฟล์ข้อมูลเมตาเป็นที่จัดเก็บข้อมูลเมตาที่เกี่ยวข้องกับภาพเหล่านั้น เมื่อรันเป็นครั้งแรกที่ Docker จัดสรรพื้นที่ข้อมูลจำนวนหนึ่งและพื้นที่ข้อมูลเมตาจากพื้นที่ว่างบนไดรฟ์ที่
/var/lib/dockerติดตั้ง
นี่คือตัวอย่างบน Ubuntu (ตรวจสอบRoot Dir ):
$ docker info
...
Server Version: 18.06.1-ce
Storage Driver: aufs
Root Dir: /var/snap/docker/common/var-lib-docker/aufs
...
Docker Root Dir: /var/snap/docker/common/var-lib-docker
...
และนี่คือตัวอย่างของ Travis CI (ดูDocker Root Dir ):
$ docker info
Server Version: 17.09.0-ce
Storage Driver: overlay2
Backing Filesystem: extfs
...
Docker Root Dir: /var/lib/docker
...
คุณสามารถใช้--formatพารามิเตอร์เพื่อแยกข้อมูลนั้นเป็นไฟล์เดียวเช่น
$ docker info --format '{{.DriverStatus}}'
[[Root Dir /var/snap/docker/common/var-lib-docker/aufs] [Backing Filesystem extfs] [Dirs 265] [Dirperm1 Supported true]]
หรือ:
$ docker info --format '{{json .DriverStatus}}'
[["Root Dir","/var/snap/docker/common/var-lib-docker/aufs"],["Backing Filesystem","extfs"],["Dirs","265"],["Dirperm1 Supported","true"]]
ใน Docker สำหรับ Windows บันทึกอยู่ที่นี่: %USERPROFILE%\AppData\Local\Docker
ตรวจสอบโฟลเดอร์นักเทียบท่าใน /var/lib
ภาพจะถูกเก็บไว้ที่ตำแหน่งด้านล่าง:
/var/lib/docker/image/overlay2/imagedb/content
/var/lib/docker/image/overlay2/ฉันคิดว่าคุณหมายถึงการเพียง: นอกจากนี้โปรดทราบว่านี่เป็นกรณีที่เกิดจากเครื่องยนต์ Docker ของคุณใช้overlay2เป็นไดรเวอร์การจัดเก็บ
ใช้docker inspect container_id
โฟลเดอร์ค้นหาภายใต้ MergedDir
# example.
"MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged
สภาพแวดล้อม: Windows 10 Pro, edge docker desktop 2.0.3.0
คลิกขวาที่ไอคอนนักเทียบท่าในถาดระบบเลือกการตั้งค่า - ขั้นสูง:
ตำแหน่งอิมเมจของดิสก์ (แก้ไขได้ผ่านเบราว์เซอร์):
C: \ Users \ Public \ Documents \ Hyper-V \ ฮาร์ดดิสก์เสมือน \ DockerDesktop.vhdx
(อยู่ที่นั่น - ไดเรกทอรีเอกสารถูกซ่อนอยู่)
docker buildคำสั่งหรือไม่
sudo docker info | grep -e "Root Dir"
บน Fedora Docker ใช้LVMสำหรับการจัดเก็บถ้ามี ในระบบของฉันdocker infoแสดง:
Storage Driver: devicemapper
Pool Name: vg01-docker--pool
Pool Blocksize: 524.3 kB
Base Device Size: 10.74 GB
Backing Filesystem: xfs
Data file:
Metadata file:
Data Space Used: 9.622 GB
...
ในกรณีที่จะเพิ่มการจัดเก็บที่คุณจะต้องใช้ LVM เครื่องมือบรรทัดคำสั่งหรือผู้จัดการพาร์ทิชันที่รองรับเช่นblivet
ใน Windows 2016 นักเทียบท่า (DockerMsftProvider) ใช้โฟลเดอร์ "windowsfilter" ใต้รากนักเทียบท่า
>docker info
...
Storage Driver: windowsfilter
...
Docker Root Dir: C:\ProgramData\docker
...
จะใช้โฟลเดอร์ "tmp" ภายใต้ root docker เพื่อดาวน์โหลดไฟล์และจะลบไฟล์หลังจากแตกไฟล์ที่ดาวน์โหลดไปยังโฟลเดอร์ "windowsfilter"
บน Debian Unstable / Sid,
docker info เพื่อค้นหาข้อมูลทั้งระบบ
ภาพจะถูกเก็บไว้ที่/var/lib/docker/image/overlay2/imagedb/contentและ
ภาชนะจะถูกเก็บไว้ที่ /var/lib/docker/containers
รุ่นนักเทียบท่ารุ่น18.06.0-ceAPI1.38
ฉันไม่สามารถแก้ไขคำถามด้วย Docker เวอร์ชัน 18.09 บน macos โดยใช้คำตอบข้างต้นแล้วลองอีกครั้ง
ทางออกที่แท้จริงสำหรับฉันเท่านั้นที่ใช้การdocker-compose.ymlกำหนดค่านี้:
version: '3.7'
...
services:
demo-service:
volumes:
- data-volume:/var/tmp/container-volume
volumes:
data-volume:
driver: local
driver_opts:
type: none
o: bind
device: /tmp/host-volume
หลังจากเปิดตัวdocker-compose upในที่สุดฉันก็มี/tmp/host-volumeจาก macos ที่แชร์เป็นโวลุ่มที่เขียนได้จากในคอนเทนเนอร์:
> docker exec -it 1234 /bin/bash
bash-4.4$ df
Filesystem 1K-blocks Used Available Use% Mounted on
...
osxfs 488347692 464780044 21836472 96% /var/tmp/container-volume
หวังว่านี่จะช่วยผู้อื่นด้วย
ภาพจะถูกเก็บไว้ภายใน/var/lib/dockerและภายใต้storage driverไดเรกทอรีที่เกี่ยวข้อง
ไดร์เวอร์หน่วยเก็บข้อมูลที่กำลังถูกใช้สามารถถูกกำหนดโดยการดำเนินการdocker infoคำสั่ง
ตามที่คู่มือการเริ่มต้นใช้งาน Docker "รูปภาพที่สร้างขึ้นของคุณ" คือ "ในรีจิสตรีอิมเมจ Docker ในเครื่องของคุณ"
ยังแปลกสำหรับฉันเพราะตอนนี้มันนำไปสู่คำถาม รีจิสตรีอิมเมจ Docker ในเครื่องของฉันอยู่ที่ไหน
อย่างไรก็ตามฉันคิดว่าข้อมูลนี้คุ้มค่าที่จะแบ่งปันเป็นคำตอบ
หากใครต้องการมันเพื่อจุดประสงค์ในการเขียนสคริปต์นี่คือโซลูชันบรรทัดเดียว
ใน POSIX เชลล์ที่เปิดใช้งาน PCRE grepให้ลอง:
DOCKER_ROOT_DIR="$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"
ใน PowerShell:
$DOCKER_ROOT_DIR="$(docker info 2>&1 | foreach {if($_ -match "Docker Root Dir"){$_.TrimStart("Docker Root Dir: ")}})"
หมายเหตุเมื่ออยู่ใน Windows 10 (ณ10.0.18999.1) ในการกำหนดค่าเริ่มต้นมันกลับมา:
C:\ProgramData\Docker ในโหมด "คอนเทนเนอร์ของ Windows"/var/lib/dockerในโหมด "คอนเทนเนอร์ของ Linux"DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')"แต่ในท้ายที่สุดมันเป็นไฟล์ไม่ใช่ไดเรกทอรี
sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"รายการเนื้อหาของไดเรกทอรีนี้