Tôi quản lý để tìm các container trong thư mục /var/lib/docker/containers
, nhưng tôi không thể tìm thấy hình ảnh.
Các thư mục và tập tin theo là /var/lib/docker
gì?
Tôi quản lý để tìm các container trong thư mục /var/lib/docker/containers
, nhưng tôi không thể tìm thấy hình ảnh.
Các thư mục và tập tin theo là /var/lib/docker
gì?
Câu trả lời:
Nội dung của /var/lib/docker
thư mục khác nhau tùy thuộc vào trình điều khiển Docker đang sử dụng để lưu trữ .
Theo mặc định này sẽ aufs
nhưng có thể rơi trở lại overlay
, overlay2
, btrfs
, devicemapper
hoặc zfs
phụ thuộc vào sự hỗ trợ hạt nhân của mình. Ở hầu hết các nơi này sẽ có aufs
nhưng RedHats đã đi cùngdevicemapper
.
Bạn có thể tự đặt trình điều khiển lưu trữ bằng -s
hoặc--storage-driver=
tùy chọn cho trình nền Docker .
/var/lib/docker/{driver-name}
sẽ chứa bộ lưu trữ cụ thể của trình điều khiển cho nội dung của hình ảnh. /var/lib/docker/graph/<id>
bây giờ chỉ chứa siêu dữ liệu về hình ảnh, trong json
và layersize
tệp.Trong trường hợp aufs
:
/var/lib/docker/aufs/diff/<id>
có nội dung tập tin của hình ảnh./var/lib/docker/repositories-aufs
là một tệp JSON chứa thông tin hình ảnh cục bộ. Điều này có thể được xem với lệnh docker images
.Trong trường hợp devicemapper
:
/var/lib/docker/devicemapper/devicemapper/data
lưu trữ những hình ảnh/var/lib/docker/devicemapper/devicemapper/metadata
siêu dữ liệudocker info
và tìm vị trí thực tế cụ thể cho thiết lập của bạn .
Docker for Mac
với 2 hình ảnh 1,5 GB mỗi cái và /var/lib
không có thư mục docker
.
Khi sử dụng Docker cho Mac Application, có vẻ như các container được lưu trữ trong VM được đặt tại:
~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
CẬP NHẬT (Lịch sự của mmorin ):
Kể từ ngày 15 tháng 1 năm 2019, dường như chỉ có tệp này:
~/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw
có chứa Docker Disk và tất cả các hình ảnh và thùng chứa bên trong nó.
ubuntu
, nginx
), hay đây là vị trí cho tất cả các container? Câu hỏi ban đầu yêu cầu hình ảnh , không phải container ...
Docker for Mac
với hai hình ảnh 1,5 GB mỗi hình và ~/Library/Containers/Data/com.docker.docker/Data
không có thư mục com.docker.driver.amd64-linux
và tập tin lớn duy nhất nằm trong vms/0/Docker.raw
3,6 GB.
du -hd1 ~/Library/Containers/com.docker.docker/Data/
Đây là cách làm cũ, bây giờ nó đã thay đổi. Bỏ qua câu trả lời này vào năm 2019
Trong trường hợp đặc biệt của Mac OS X hoặc Windows, sử dụng boot2docker, hình ảnh Docker của bạn được lưu trữ trong VirtualBox VM được quản lý bởi boot2docker.
VM này sẽ được lưu trữ ở vị trí bình thường của hình ảnh VirtualBox:
HĐH X: ~/VirtualBox VMs/boot2docker-vm
Các cửa sổ: %USERPROFILE%/VirtualBox VMs/boot2docker-vm
Bạn có thể đặt lại bằng cách chạy (CẢNH BÁO: Điều này sẽ hủy tất cả hình ảnh bạn đã tạo và tải xuống cho đến nay):
boot2docker down
boot2docker destroy
boot2docker init
boot2docker up
Điều này đặc biệt hữu ích nếu bạn giữ hàng tấn hình ảnh trung gian khi xây dựng / gỡ lỗi bản dựng mà không có các tùy chọn --rm hữu ích, tôi trích dẫn chúng ở đây để tham khảo: Sử dụng:
docker build -t webapp --rm=true --force-rm=true .
thay vì:
docker build -t webapp .
%USERPROFILE%\.docker\machine\machines
(vui lòng lưu ý dừng hoàn toàn trong đường dẫn)
C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
Trên thực tế, hình ảnh Docker được lưu trữ trong hai tệp như được hiển thị bằng lệnh sau
$ docker info
Tập tin dữ liệu:
/var/lib/docker/devicemapper/devicemapper/data
Tệp siêu dữ liệu:
/var/lib/docker/devicemapper/devicemapper/metadata
docker info
rất hữu ích, nhưng đầu ra Docker Root Dir: /var/lib/docker
không cho biết vị trí lưu trữ hình ảnh (xem câu trả lời cụ thể của Mac ở trên).
Trên 'Docker cho Windows' mới phát hành, sử dụng Hyper-V, dữ liệu được đặt trong đĩa cứng ảo Docker:
C: \ Users \ Public \ Documents \ Hyper-V \ Đĩa cứng ảo \ MobyLinuxVM.vhdx
Bạn cũng có thể mở 'Trình quản lý Hyper-V' để truy cập Docker / MobyLinuxVM.
C:\ProgramData\docker\windowsfilter
cho tôi. Thông tin thêm: stackoverflow.com/a/39971954/188740
Các hình ảnh được lưu trữ trong /var/lib/docker/graph/<id>/layer
.
Lưu ý rằng hình ảnh chỉ khác với hình ảnh gốc. ID cha được lưu trữ với siêu dữ liệu của hình ảnh /var/lib/docker/graph/<id>/json
.
Khi bạn docker run
một hình ảnh. AUFS sẽ 'hợp nhất' tất cả các lớp thành một hệ thống tệp có thể sử dụng.
Trên Ubuntu, bạn có thể "chơi" với hình ảnh đang chạy
sudo baobab /var/lib/docker
Trên thực tế, hình ảnh được lưu trữ trong /var/lib/docker/aufs/diff
Đối với ai đó đang sử dụng hộp công cụ Docker (sử dụng docker-machine), các câu trả lời liên quan đến boot2docker trên Mac OS X là không hợp lệ. VM máy docker được gọi là "mặc định" và nó tồn tại trong /Users/<username>/.docker/machine/machines/default/
thư mục.
Trong Docker cho Windows ( Windows gốc), bộ nhớ chứa mặc định là:
> docker info
...
Docker Root Dir: C:\ProgramData\Docker
...
docker build
lệnh và tôi không thấy một tệp mà tôi nghĩ là tệp hình ảnh. Tôi thấy một số thư mục và một số tệp văn bản (ví dụ: service.txt). Loại tệp nào & với phần mở rộng tệp nào docker build
tạo ra?
Nếu bạn đang sử dụng Docker cho MAC (không boot2docker
) thì vị trí là/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
Tôi tìm thấy hình ảnh. Nhưng đó không phải là container mặc dù. Không thấy chúng trong thư mục Dữ liệu này thực sự ..
Như đã trả lời ở đây , nếu bạn ở trên Mac, nó nằm ở
/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Mở rộng câu trả lời của Tristan, trong Windows với Hyper-V, bạn có thể di chuyển hình ảnh với các bước sau từ matthuisman:
Trong Windows 10,
- Dừng docker vv
- Nhập "Trình quản lý Hyper-V" trong hộp tìm kiếm trên thanh tác vụ và chạy nó.
- Chọn PC của bạn trong khung bên trái (Của tôi được gọi là DESKTOP-CBP **)
- Nhấp chuột phải vào đúng máy ảo (Của tôi được gọi là MobyLinuxVM)
- Chọn "Tắt" (Nếu nó đang chạy)
- Nhấp chuột phải vào nó một lần nữa và chọn "Di chuyển"
- Làm theo lời nhắc
docker build
lệnh. Tôi đang dùng máy tính Windows 10. Tôi tìm trong C: \ Users \ Public \ Documents \ Hyper-V \ Đĩa cứng ảo, nhưng tất cả những gì tôi thấy là MobyLinuxVM.vhdx. Những hình ảnh thực tế được lưu trữ ở đâu?
Nếu bạn nhớ rằng Docker vẫn đang chạy trong VM, các đường dẫn hệ thống có liên quan đến VM chứ không phải từ hệ thống Mac Osx. Như nó nói tất cả được chứa trong một tệp VM:
/Users/MyUserName/L Library / Content / com.docker.docker / Data / com.docker.driver.amd64-linux / Docker.qcow2
Hãy thử chạy hình ảnh Alps với tùy chọn âm lượng này và lệnh ls bạn có thể liệt kê máy chủ VM:
docker chạy --rm -it -v /: / vm-root alpine: cạnh ls -l / vm-root
Sau này chỉ cần thử:
docker chạy --rm -it -v /: / vm-root alpine: cạnh ls -l / vm-root / var / lib / docker
Bây giờ, bạn có thể liệt kê thư mục docker từ máy chủ VM
Tôi chỉ có thể trả lời câu hỏi này cho người dùng Ubuntu:
Thư mục gốc của docker có thể được tìm thấy khi bạn chạy lệnh docker info
Thư mục Docker sẽ được đưa ra trong dòng này: " Docker Root Dir: /var/lib/docker
"
Về hình ảnh docker, chúng được lưu trữ trong thư mục docker:
/var/lib/docker/aufs/diff/
Hãy nhớ những điều này không giống nhau trong tất cả các phiên bản của docker. Hiện tại, tôi đang sử dụng 1.12.3.
Sử dụng docker info
lệnh để hiển thị thông tin trên toàn hệ thống và vị trí có thể thay đổi.
Tùy thuộc vào trình điều khiển lưu trữ đang sử dụng, thông tin bổ sung có thể được hiển thị, chẳng hạn như tên nhóm, tệp dữ liệu, tệp siêu dữ liệu, không gian dữ liệu được sử dụng, tổng không gian dữ liệu, không gian siêu dữ liệu được sử dụng và tổng không gian siêu dữ liệu.
Tệp dữ liệu là nơi lưu trữ hình ảnh và tệp siêu dữ liệu là nơi lưu trữ dữ liệu meta liên quan đến những hình ảnh đó. Khi chạy lần đầu tiên Docker sẽ phân bổ một lượng không gian dữ liệu và không gian dữ liệu meta nhất định từ không gian có sẵn trên ổ đĩa
/var/lib/docker
được gắn.
Dưới đây là ví dụ trên Ubuntu (kiểm tra 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
...
Và đây là ví dụ trên Travis CI (xem Docker Root Dir ):
$ docker info
Server Version: 17.09.0-ce
Storage Driver: overlay2
Backing Filesystem: extfs
...
Docker Root Dir: /var/lib/docker
...
Bạn có thể sử dụng --format
tham số để trích xuất thông tin đó thành một tệp, ví dụ:
$ docker info --format '{{.DriverStatus}}'
[[Root Dir /var/snap/docker/common/var-lib-docker/aufs] [Backing Filesystem extfs] [Dirs 265] [Dirperm1 Supported true]]
hoặc là:
$ docker info --format '{{json .DriverStatus}}'
[["Root Dir","/var/snap/docker/common/var-lib-docker/aufs"],["Backing Filesystem","extfs"],["Dirs","265"],["Dirperm1 Supported","true"]]
kiểm tra thư mục docker trong /var/lib
các hình ảnh được lưu trữ ở vị trí dưới đây:
/var/lib/docker/image/overlay2/imagedb/content
/var/lib/docker/image/overlay2/
. Cũng lưu ý rằng đây là trường hợp do thực tế là công cụ Docker của bạn đang sử dụng overlay2
làm Trình điều khiển lưu trữ.
Môi trường: Windows 10 Pro, docker desktop 2.0.3.0 edge
bấm chuột phải vào biểu tượng docker trong khay hệ thống, chọn cài đặt - nâng cao:
Vị trí ảnh đĩa (có thể chỉnh sửa thông qua trình duyệt):
C: \ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx
(nó ở đó - Thư mục tài liệu bị ẩn)
docker build
lệnh?
Trên Fedora, Docker sử dụng LVM để lưu trữ nếu có sẵn. Trên hệ thống của tôi docker info
cho thấy:
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
...
Trong trường hợp đó, để tăng dung lượng lưu trữ, bạn sẽ phải sử dụng các công cụ dòng lệnh LVM hoặc các trình quản lý phân vùng tương thích như blivet .
Trong Windows 2016, docker (DockerMsftProvider) sử dụng thư mục "windowsfilter" dưới gốc docker
>docker info
...
Storage Driver: windowsfilter
...
Docker Root Dir: C:\ProgramData\docker
...
Nó sử dụng thư mục "tmp" dưới gốc docker để tải xuống các tệp và nó xóa các tệp sau khi giải nén các tệp đã tải xuống vào thư mục "windowsfilter".
Tôi không thể giải quyết câu hỏi với Docker phiên bản 18.09 trên macos bằng các câu trả lời ở trên và thử lại.
Giải pháp thực tế duy nhất cho tôi là sử dụng docker-compose.yml
cấu hình này :
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
Sau khi ra mắt với docker-compose up
tôi cuối cùng đã có /tmp/host-volume
từ macos được chia sẻ dưới dạng khối lượng có thể ghi từ bên trong container:
> 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
Hy vọng điều này sẽ giúp những người khác quá.
Theo hướng dẫn Bắt đầu Docker "hình ảnh được xây dựng của bạn" là "trong sổ đăng ký hình ảnh Docker cục bộ của máy bạn."
Điều này vẫn còn xa lạ với tôi, bởi vì bây giờ nó dẫn đến câu hỏi. Đăng ký hình ảnh Docker cục bộ của máy tôi ở đâu?
Tuy nhiên, tôi chắc chắn nghĩ rằng thông tin này đáng để chia sẻ như một câu trả lời.
Nếu bất cứ ai cần nó cho các mục đích kịch bản, đây là một giải pháp một dòng.
Trong vỏ POSIX, với PCRE được bật grep
, hãy thử:
DOCKER_ROOT_DIR="$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"
Trong PowerShell:
$DOCKER_ROOT_DIR="$(docker info 2>&1 | foreach {if($_ -match "Docker Root Dir"){$_.TrimStart("Docker Root Dir: ")}})"
Lưu ý, khi trên Windows 10 (kể từ 10.0.18999.1
), ở cấu hình mặc định, nó sẽ trả về:
C:\ProgramData\Docker
trong chế độ "Windows container"/var/lib/docker
, trong chế độ "Linux container"DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')"
, nhưng cuối cùng nó là một tệp chứ không phải thư mục
sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"
liệt kê các nội dung của thư mục này.