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/dockergì?
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/dockergì?
Câu trả lời:
Nội dung của /var/lib/dockerthư 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ẽ aufsnhưng có thể rơi trở lại overlay, overlay2, btrfs, devicemapperhoặc zfsphụ 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ó aufsnhưng RedHats đã đi cùngdevicemapper .
Bạn có thể tự đặt trình điều khiển lưu trữ bằng -shoặ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 jsonvà layersizetệ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-aufslà 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 infovà tìm vị trí thực tế cụ thể cho thiết lập của bạn .
                    Docker for Macvới 2 hình ảnh 1,5 GB mỗi cái và /var/libkhô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 Macvới hai hình ảnh 1,5 GB mỗi hình và ~/Library/Containers/Data/com.docker.docker/Datakhông có thư mục com.docker.driver.amd64-linuxvà tập tin lớn duy nhất nằm trong vms/0/Docker.raw3,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/dataTệp siêu dữ liệu:
/var/lib/docker/devicemapper/devicemapper/metadata
docker inforất hữu ích, nhưng đầu ra Docker Root Dir: /var/lib/dockerkhô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\windowsfiltercho 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 runmộ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 buildlệ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 buildtạ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.qcow2Tô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 buildlệ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 infolệ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 --formattham 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 overlay2là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 buildlệ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 infocho 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.ymlcấ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 uptôi cuối cùng đã có /tmp/host-volumetừ 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.