ฉันจัดการเพื่อค้นหาคอนเทนเนอร์ภายใต้ไดเรกทอรี/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-ce
API1.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: ).*')"
รายการเนื้อหาของไดเรกทอรีนี้