Где образы Docker хранятся на главном компьютере?


876

Мне удалось найти контейнеры в каталоге /var/lib/docker/containers, но я не могу найти изображения.

Под какими каталогами и файлами /var/lib/docker?


2
В таких случаях лучше всего указать особенности операционной системы в названии вопроса и / или в постановке вопроса. Два хороших ответа были предоставлены для Linux и MacOS (Mac OS X).
Webel IT Australia - upvoter

Ответы:


637

Содержимое /var/lib/dockerкаталога зависит от драйвера, который Docker использует для хранения .

По умолчанию это будет , aufsно может упасть обратно overlay, overlay2, btrfs, devicemapperили в zfsзависимости от вашей поддержки ядра. В большинстве мест это будет, aufsно RedHats пошел сdevicemapper .

Вы можете вручную установить драйвер хранилища с помощью опции -sили--storage-driver= для демона Docker .

  • /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 метаданные
  • Обратите внимание, что эти файлы являются «разреженными» файлами с тонкой подготовкой, поэтому они не такие большие, как кажутся.

1
Могу ли я увидеть содержимое внутри, смонтировав его каким-либо образом?
Р. В.

1
Если вы установите драйвер хранилища после того, как он уже запущен и у него есть несколько запущенных контейнеров с изображениями, перенесет ли он дату при следующем перезапуске демона? Если нет, то как изменить драйвер хранилища в этом случае?
БТР Найду


92
Сделайте себе одолжение и не проверяйте значения по умолчанию. Используйте docker infoи найдите фактическое местоположение, специфичное для вашей установки .
Бруно Броноски

5
Кажется, это изменилось. Я использую Docker for Macс 2 изображениями по 1,5 ГБ каждый и /var/libне имеет каталога docker.
Мигельморин

299

При использовании Docker для Mac Application создается впечатление, что контейнеры хранятся в виртуальной машине, расположенной по адресу:

~/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 Disk и все образы и контейнеры внутри него.


7
Это место для всех изображений (например ubuntu, nginx) или это место для всех контейнеров? Оригинальный вопрос требует изображений , а не контейнеров ...
Сиу Чинг Понг - Асука Кэндзи -

2
Если вы помните, что Docker все еще работает в ВМ, системные пути относятся к ВМ, а не из системы Mac Osx. Попробуйте следующую команду: docker запустите --rm -it -v /: / vm-root alpine: edge ls -l / vm-root и после этого: docker запустите --rm -it -v /: / vm-root alpine: edge ls -l / vm-root / var / lib / docker Вы можете просмотреть папку докера с хоста WM
user1842947

3
Кажется, это изменилось. Я использую Docker for Macс двумя изображениями по 1,5 ГБ каждый и ~/Library/Containers/Data/com.docker.docker/Dataне имеет каталога, com.docker.driver.amd64-linuxи единственный большой файл находится vms/0/Docker.rawс 3,6 ГБ.
Мигельморин

1
Используется ли qcow2 или raw, зависит от того, находитесь ли вы в MacOS High Sierra с APFS или ниже: docs.docker.com/docker-for-mac/faqs/#disk-usage
Питер

1
Проверьте размер для Mac:du -hd1 ~/Library/Containers/com.docker.docker/Data/
Эфрен

122

Это был старый способ, теперь он изменился. Не обращайте внимания на этот ответ с 2019 года

В особом случае Mac OS X или Windows, используя boot2docker, ваши образы Docker хранятся в виртуальной машине VirtualBox, управляемой boot2docker.

Эта виртуальная машина будет храниться в обычном месте образов VirtualBox:

      OS X: ~/VirtualBox VMs/boot2docker-vm

      Окна: %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 .

16
После новой установки Docker в Windows 10 я могу подтвердить, что в результате первого щелчка по ярлыку Docker Quickstart Terminal в первый раз создается виртуальная машина (ВМ) с именем «default» (после нескольких неудачных запусков - продолжайте работать до тех пор, пока оно работает). Эта виртуальная машина «по умолчанию» может быть расположена в Windows по адресу: %USERPROFILE%\.docker\machine\machines (обратите внимание на точку остановки в пути)
AnotherLongUsername

6
В более новых выпусках boot2docker теперь является docker-машиной . См. Docs.docker.com/machine/migrate-to-machine
khylo

3
Можно ли изменить это местоположение?
Дабл,

13
Ответ больше не верен для Windows 10. Вместо этого, посмотрите более новый ответ от @tristan, на который ссылаетсяC:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx
aaronsteers

5
% USERPROFILE% \. Docker все еще корректен для установок win7.
RMorrisey

119

На самом деле, изображения Docker хранятся в двух файлах, как показано следующей командой

$ docker info

Файл данных: /var/lib/docker/devicemapper/devicemapper/data

Файл метаданных: /var/lib/docker/devicemapper/devicemapper/metadata



8
Да, к сожалению, эти две строки "(мета) файл данных" не появляются в каждом докере. Это зависит от используемого водителя
Orabîg

@DmitryYudin Ответ Mirosval работает для последней версии Docker для Mac .
Франклин Ю

8
Правильный ответ: «Это то, где он находится на МОЕЙ машине». Правильный ответ: «Вот как вы найдете это на вашей машине». Это правильный ответ. Я присоединился к компании с 11 различными томами EBS, полными образов докеров. Этот ответ позволил мне выяснить, какой был текущий «Root Dir».
Бруно Броноски

В Mac OS X (по крайней мере, в Yosemite, то есть EOL относительно Docker), docker infoочень полезно, но в выводе Docker Root Dir: /var/lib/dockerне указывается место хранения изображения (см. Ответ для конкретного Mac выше).
Webel IT Australia - upvoter

70

На недавно выпущенном Docker для Windows, который использует Hyper-V, данные находятся на виртуальном жестком диске Docker:

C: \ Users \ Public \ Documents \ Hyper-V \ Виртуальные жесткие диски \ MobyLinuxVM.vhdx

Вы также можете открыть «Диспетчер Hyper-V» для доступа к Docker / MobyLinuxVM.


13
Docker в Windows 10 Anniversary Update добавляет C:\ProgramData\docker\windowsfilterдля меня файлы изображений . Дополнительная информация: stackoverflow.com/a/39971954/188740
Джонни Ошика

1
«Hyper-V Manager» - это ответ!
Реза

68

Изображения хранятся в /var/lib/docker/graph/<id>/layer.

Обратите внимание, что изображения просто отличаются от родительского изображения. Родительский идентификатор хранится вместе с метаданными изображения /var/lib/docker/graph/<id>/json.

Когда вы docker runизображение. AUFS объединит все слои в одну используемую файловую систему.


11
Этот ответ уже устарел, они изменили положение вещей.
эфир

7
@Air Можете ли вы опубликовать то, что произошло?
Элайджа Линн

1
нет папки с графами больше
Пэдди

49

В Ubuntu вы можете «играть» с изображениями, работающими

sudo baobab /var/lib/docker

На самом деле, изображения хранятся в /var/lib/docker/aufs/diff

снимок экрана, показывающий инструмент анализатора диска baobab, работающий на / var / lib / docker


Действительно хорошо. На Mac DaisyDisk аналогичен (отображение колеса), GrandPerspective также полезен (прямоугольники).
Webel IT Australia - upvoter

Кажется, это единственный надежный способ найти его.
Александр

48

Для тех, кто использует панель инструментов Docker (которая использует docker-machine), ответы, касающиеся boot2docker в Mac OS X, недействительны. Виртуальная машина Docker называется «по умолчанию» и существует в /Users/<username>/.docker/machine/machines/default/каталоге.


3
Я не могу найти никаких контейнеров или папок с изображениями в этом каталоге.
Иварают

3
ищите disk.vmdk в этом каталоге
lukeaus

1
$ docker images -a дает около 1 гигабайта изображений, в то время как disk.vmdk в ~ / .docker составляет около 20 гигабайт. Как так?
Grav

Где это хранится в Windows?
Shreyas

@Grav: виртуальная машина выделяет 20 гигабайт для будущего использования, но использует только 1 гигабайт для изображений.
primavera133

22

В Docker для Windows (собственная Windows) контейнерное хранилище по умолчанию находится по адресу:

   > docker info
   ...
   Docker Root Dir: C:\ProgramData\Docker
   ...

Я выполнил docker buildкоманду, и я не вижу файл, который я считаю файлом изображения. Я вижу некоторые папки и некоторые текстовые файлы (например, service.txt). Какой тип файла и с каким расширением файла docker buildсоздает?
user3731622

22

Если вы используете 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я нашел изображение. Но это не контейнеры, хотя. Не видеть их в этом каталоге данных действительно ..
Rhand

1
Но, как указано выше, здесь stackoverflow.com/a/37642236/460885 именно внутри этого изображения расположены контейнеры.
rhand

7

Как ответили здесь , если вы находитесь на Mac, он находится по адресу

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

2
Docker.qcow2? Как я должен извлечь конкретное изображение докера из этого?
AlxVallejo

7

Более подробно об ответе Тристана, в Windows с Hyper-V вы можете переместить изображение с помощью следующих шагов из matthuisman:

В Windows 10

  1. Стоп докер и т. Д.
  2. Введите «Диспетчер Hyper-V» в поле поиска панели задач и запустите его.
  3. Выберите свой ПК в левой панели (мой называется DESKTOP-CBP **)
  4. Щелкните правой кнопкой мыши на правильной виртуальной машине (моя называется MobyLinuxVM)
  5. Выберите «Выключить» (если он запущен)
  6. Щелкните правой кнопкой мыши еще раз и выберите «Переместить»
  7. Следуйте инструкциям

2
Это только перемещает машину Hyper-V, но не изображения, изображения будут по-прежнему сохраняться там, где находится VHD.
olive_tree

@olive_tree Я пытаюсь найти изображения, созданные docker buildкомандой. Я на компьютере с Windows 10. Я смотрю в C: \ Users \ Public \ Documents \ Hyper-V \ Виртуальные жесткие диски, но вижу только MobyLinuxVM.vhdx. Где хранятся реальные изображения?
user3731622

5

Если вы помните, что Docker все еще работает в ВМ, системные пути относятся к ВМ, а не из системы Mac Osx. Как говорится, все содержится в файле VM:

/Users/MyUserName/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

Попробуйте запустить Alpine образ с этим параметром тома и командой ls, вы можете перечислить хост VM:

docker run --rm -it -v /: / vm-root alpine: край ls -l / vm-root

После этого просто попробуйте:

запустить docker --rm -it -v /: / vm-root alpine: край ls -l / vm-root / var / lib / docker

Теперь вы можете перечислить папку Docker с хоста VM


Спасибо! Это единственный ответ, который работал для меня в Windows 10 с Hyper-v. Мне удалось очистить поврежденные файлы в папке elusive / var / lib / docker / overlay2.
Али Чеаито

4

Я использую boot2docker для Docker на Mac OSX, поэтому изображения сохраняются в /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk.


4

Я могу ответить на этот вопрос только для пользователей Ubuntu:

Корневой каталог докера можно найти при запуске команды docker info

Каталог Docker будет указан в этой строке: " Docker Root Dir: /var/lib/docker"

Об образах докеров они хранятся в каталоге докеров: /var/lib/docker/aufs/diff/

Помните, что эти вещи не одинаковы во всех версиях докера. В настоящее время я использую 1.12.3.


4

Используйте 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"]]

3

В Docker для Windows журналы находятся здесь: %USERPROFILE%\AppData\Local\Docker


3

проверьте папку докера в /var/lib

изображения хранятся в расположении ниже:

/var/lib/docker/image/overlay2/imagedb/content

4
у него есть только папка sha256
к

Я думаю , что вы имели в виду просто: /var/lib/docker/image/overlay2/. Также обратите внимание, что это так из-за того, что ваш движок Docker использует overlay2в качестве драйвера хранилища.
Гай Авраам

3

используйте docker inspect container_id
папку поиска в MergedDir

# example. 
"MergedDir": "/var/lib/docker/overlay2/f40cc2ea8912ec3b32deeef5a1542a132f6e918acb/merged 

3

Для «Docker Desktop», нажмите на значок в панели задач Docker и нажмите «Настройки». введите описание изображения здесь

На вкладке «Дополнительно» вы можете увидеть расположение образа диска.

введите описание изображения здесь


2

Окружающая среда: Windows 10 Pro, Docker Desktop 2.0.3.0 край

щелкните правой кнопкой мыши значок докера в области уведомлений, выберите настройки - дополнительно:

Расположение образа диска (редактируется через браузер):

C: \ Users \ Public \ Documents \ Hyper-V \ Виртуальные жесткие диски \ DockerDesktop.vhdx

(это там - каталог документов скрыт)


Является ли C: \ Users \ Public \ Documents \ Hyper-V \ Virtual Hard Disks \ DockerDesktop.vhdx образом, созданным docker buildкомандой?
user3731622


1

В 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 .


1

В Windows 2016 докер (DockerMsftProvider) использует папку «windowsfilter» в корневом каталоге докера.

>docker info
...
Storage Driver: windowsfilter
...
Docker Root Dir: C:\ProgramData\docker
...

Он использует папку «tmp» в корневом каталоге докера для загрузки файлов и удаляет файлы после извлечения загруженных файлов в папку «windowsfilter».


0

На Debian Unstable / Sid,

docker info найти общесистемную информацию.

изображения хранятся в /var/lib/docker/image/overlay2/imagedb/contentи

контейнеры хранятся в /var/lib/docker/containers

версия докера, версия 18.06.0-ceAPI1.38


0

Я не смог решить вопрос с 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

Надеюсь, что это помогает другим.


0

Изображения хранятся внутри /var/lib/dockerи затем в соответствующем storage driverкаталоге.

Используемый драйвер хранилища можно определить, выполнив docker infoкоманду.


0

Согласно руководству по началу работы с Docker «ваш встроенный образ» находится «в локальном реестре образов Docker вашей машины».

введите описание изображения здесь

Это все еще странно для меня, потому что теперь это приводит к вопросу. Где находится локальный реестр образов Docker моей машины?

Тем не менее, я определенно думаю, что эта информация стоит поделиться в качестве ответа.


Ха-ха, я думаю, это самое большее комментарий. Был бы отличный комментарий, хотя!
Монг Х. Нг

0

Если кому-то это нужно для сценариев, вот решение в одну строку.

В оболочке 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"

На CentOS мне приходилось пользоваться DOCKER_ROOT_DIR="$(sudo docker info 2>&1 | grep -oP '(?<=Data loop file: ).*')", но в конце концов это файл, а не каталог
HairOfTheDog

Вы уверены, что это не каталог? Для меня sudo ls "$(docker info 2>&1 | grep -oP '(?<=^Docker Root Dir: ).*')"перечислите содержимое этого каталога.
вулкан ворон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.