Мне удалось найти контейнеры в каталоге /var/lib/docker/containers
, но я не могу найти изображения.
Под какими каталогами и файлами /var/lib/docker
?
Мне удалось найти контейнеры в каталоге /var/lib/docker/containers
, но я не могу найти изображения.
Под какими каталогами и файлами /var/lib/docker
?
Ответы:
Содержимое /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
метаданныеdocker info
и найдите фактическое местоположение, специфичное для вашей установки .
Docker for Mac
с 2 изображениями по 1,5 ГБ каждый и /var/lib
не имеет каталога docker
.
При использовании 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 и все образы и контейнеры внутри него.
ubuntu
, nginx
) или это место для всех контейнеров? Оригинальный вопрос требует изображений , а не контейнеров ...
Docker for Mac
с двумя изображениями по 1,5 ГБ каждый и ~/Library/Containers/Data/com.docker.docker/Data
не имеет каталога, com.docker.driver.amd64-linux
и единственный большой файл находится vms/0/Docker.raw
с 3,6 ГБ.
du -hd1 ~/Library/Containers/com.docker.docker/Data/
Это был старый способ, теперь он изменился. Не обращайте внимания на этот ответ с 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 .
%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 для Windows, который использует Hyper-V, данные находятся на виртуальном жестком диске Docker:
C: \ Users \ Public \ Documents \ Hyper-V \ Виртуальные жесткие диски \ MobyLinuxVM.vhdx
Вы также можете открыть «Диспетчер Hyper-V» для доступа к Docker / MobyLinuxVM.
C:\ProgramData\docker\windowsfilter
для меня файлы изображений . Дополнительная информация: stackoverflow.com/a/39971954/188740
Изображения хранятся в /var/lib/docker/graph/<id>/layer
.
Обратите внимание, что изображения просто отличаются от родительского изображения. Родительский идентификатор хранится вместе с метаданными изображения /var/lib/docker/graph/<id>/json
.
Когда вы docker run
изображение. AUFS объединит все слои в одну используемую файловую систему.
В Ubuntu вы можете «играть» с изображениями, работающими
sudo baobab /var/lib/docker
На самом деле, изображения хранятся в /var/lib/docker/aufs/diff
Для тех, кто использует панель инструментов Docker (которая использует docker-machine), ответы, касающиеся boot2docker в Mac OS X, недействительны. Виртуальная машина Docker называется «по умолчанию» и существует в /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
Более подробно об ответе Тристана, в Windows с Hyper-V вы можете переместить изображение с помощью следующих шагов из matthuisman:
В Windows 10
- Стоп докер и т. Д.
- Введите «Диспетчер Hyper-V» в поле поиска панели задач и запустите его.
- Выберите свой ПК в левой панели (мой называется DESKTOP-CBP **)
- Щелкните правой кнопкой мыши на правильной виртуальной машине (моя называется MobyLinuxVM)
- Выберите «Выключить» (если он запущен)
- Щелкните правой кнопкой мыши еще раз и выберите «Переместить»
- Следуйте инструкциям
docker build
командой. Я на компьютере с Windows 10. Я смотрю в C: \ Users \ Public \ Documents \ Hyper-V \ Виртуальные жесткие диски, но вижу только MobyLinuxVM.vhdx. Где хранятся реальные изображения?
Если вы помните, что 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
Я использую boot2docker для Docker на Mac OSX, поэтому изображения сохраняются в /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk
.
Я могу ответить на этот вопрос только для пользователей Ubuntu:
Корневой каталог докера можно найти при запуске команды docker info
Каталог Docker будет указан в этой строке: " Docker Root Dir: /var/lib/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"]]
проверьте папку докера в /var/lib
изображения хранятся в расположении ниже:
/var/lib/docker/image/overlay2/imagedb/content
/var/lib/docker/image/overlay2/
. Также обратите внимание, что это так из-за того, что ваш движок Docker использует overlay2
в качестве драйвера хранилища.
Окружающая среда: Windows 10 Pro, Docker Desktop 2.0.3.0 край
щелкните правой кнопкой мыши значок докера в области уведомлений, выберите настройки - дополнительно:
Расположение образа диска (редактируется через браузер):
C: \ Users \ Public \ Documents \ Hyper-V \ Виртуальные жесткие диски \ DockerDesktop.vhdx
(это там - каталог документов скрыт)
docker build
командой?
В 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» в корневом каталоге докера для загрузки файлов и удаляет файлы после извлечения загруженных файлов в папку «windowsfilter».
Я не смог решить вопрос с 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
Надеюсь, что это помогает другим.
Согласно руководству по началу работы с 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: ).*')"
перечислите содержимое этого каталога.