Мені вдалося знайти контейнери під каталогом /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 додатків виявляється, що контейнери зберігаються у ВМ, розташованому за адресою:
~/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 VM, керований boot2docker.
Цей VM буде зберігатися у звичайному місці зображень VirtualBox:
ОС 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 для Windows", який використовує Hyper-V, дані розміщені на віртуальному жорсткому диску Docker:
C: \ Користувачі \ Громадські \ Документи \ 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 не є дійсними. VM докер-машини називається "за замовчуванням" і він існує в /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 Manager" у вікні пошуку на панелі завдань та запустіть його.
- Виберіть свій комп'ютер у лівій панелі (Шахта називається DESKTOP-CBP **)
- Клацніть правою кнопкою миші на правильній віртуальній машині (Шахта називається MobyLinuxVM)
- Виберіть "Вимкнути" (якщо він працює)
- Клацніть правою кнопкою миші знову та виберіть "Перемістити"
- Дотримуйтесь підказок
docker build
командою. Я на комп'ютері з Windows 10. Я дивлюся на C: \ Users \ Public \ Documents \ Hyper-V \ Віртуальні жорсткі диски, але все, що я бачу, це MobyLinuxVM.vhdx. Де зберігаються фактичні зображення?
Якщо ви пам’ятаєте, що Docker все ще працює у вітчизняній машині, шляхи до системи відносяться до VM, а не до системи 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 run --rm -it -v /: / vm-root alpine: край ls -l / vm-root / var / lib / docker
Тепер ви можете перелічити папку докера від хоста VM
Я використовую boot2docker для Docker на Mac OSX, тому зображення зберігаються в /Users/<USERNAME>/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vmdk
.
Я можу відповісти на це питання лише для користувачів Ubuntu:
Кореневий каталог docker можна знайти під час запуску команди 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, докерський робочий стіл 2.0.3.0 край
клацніть правою кнопкою миші значок докера в системному треї, виберіть налаштування - розширені:
Розташування образу диска (можна редагувати через браузер):
C: \ Користувачі \ Громадські \ Документи \ 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
>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 Getting Star "ваш вбудований образ" знаходиться в локальному реєстрі зображень 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: ).*')"
список вмісту цього каталогу.