docker где лежат контейнеры

ПРИМЕЧАНИЕ. Я новичок в Windows и Docker.

Учебное пособие, которое я использовал, говорит, что они находятся в /var/lib/docker/containers если мы используем Linux, но я не могу найти это на моей машине с Windows.

4 ответа

Введите Docker-машину с

там вы должны найти свои контейнеры.

С Windows 10 Anniversary Update все могло измениться. Я установил Docker из исходного кода здесь ( ), как описано здесь:

Docker помещает все изображения в эту папку:

и все контейнеры в этой папке:

Простой способ проверить это выполнить:

Он должен сказать вам, где хранятся ваши файлы:

После просмотра какой-то пост на Stackoverflow и Google. Я нашел этот каталог:

Здесь вы можете завершить настройку с помощью виртуальных машин

Еще одна важная вещь — изображения виртуализируются Hyper-V, поэтому информация должна храниться здесь.

Docker, установленный в Windows с помощью панели инструментов Docker (с использованием виртуального поля вместо Hyper-V), одна виртуальная машина создается на C:UsersYOURUSERNAME.dockermachinemachines с именем по default поэтому вы можете найти все файлы VM в папке по умолчанию ,

Вы можете подключить этот VM, используя

и вы можете найти вытащенные изображения и контейнер по этому пути (иногда вам может понадобиться использовать sudo)

У меня redmine установлен на сервере в двух контейнерах:

Хочу перенести их, запустить в другом месте, и сделать резервную копию. В документации ясно написано, что контейнеры создаются в том числе для переноса, однако инструкций как это делается я не нашёл. Нашёл, что docker хранит свои файлы в директории /var/lib/docker однако там у меня много тысяч файлов на 4 GB, а мои контейнеры — намного меньше, не хотелось бы таскать всё что есть в этой директории

2 ответа 2

В приведённой вами инструкции видно, что контейнер запускается с опцией

В момент монтирования происходит затирание данных в контейнере, если те присутствовали по этому пути.

Если опция —volume не была указана, то docker автоматически создаёт volumes исходя из параметров указанных в конфигурационном файле Dockerfile.

Если обратиться к исходникам образа для PostgreSQL, то можно заметить, что это два volumes: /var/lib/postgresql и /run/postgresql . По первому пути расположены данные postgres. Собственно, они нас и интересуют.

Узнать всю информацию про volumes отдельно взятого контейнера можно командой

Данные возвращаются в json-формате, а потому предусмотрена возможность фильтрации/поиска через опцию —format

Все volumes для которых не указан путь расположения на хосте (левая часть /host/path/to/data:/container/to/data ) хранятся в директории /var/lib/docker/volumes/ /_data/ . Таким образом, можно просто исследовав все директории в /var/lib/docker/volumes/ и найти необходимый.

Если левая часть указана, а правая совпадает с volumes, которые указаны в Dockerfile (volumes by default), то происходит переопределение директории на хосте. Зачем нам два волиума с одинковыми данными на хосте ( /var/lib/docker/volumes/ /_data/ и /host/path/to/data ), правда?

Как уже было отмечено @dmitrz, пока не существует возможности управлять volumes уже на поднятых контейнерах, также как и линковать. Первая проблема должна уже очень скоро решиться.

Команда commit

Volume является отдельной сущностью и потому не попадает в commit. Вот что говорит официальная документация.

The commit operation will not include any data contained in volumes mounted inside the container.

Вообще смущает наличие двух методов создания образов: файлами конфигурации и коммитами.

Файл конфигурации задаёт изначальную конфигурацию контейнера в момент запуска, а коммит сохраняет состояние на момент коммита. Если, к примеру, волиумы не задавать (не в конфиге и не при запуске), то состояние контейнера будет меняться (писаться данные будут именно в него). Возможно, у вас может возникнуть ситуация, когда нужно подправить конфиг postgres или ещё что-то сделать внутри контейнера, то с помощью команды docker exec -it postgresql bash вы можете зайти внутрь. Далее, все сделанные изменения вы можете закоммитить в образ, чтобы запуская контейнер где-нибудь ещё из этого образа не повторять все эти действия. Но такой подход сомнительный. Лучше сделать правки в основном конфиге Dockerfile .

Ошибка в версии Ruby

В docker существует такое понятие, как entrypoint. Обычно это shell-скрипт, который дёргается при запуске docker run или docker start . Если посмотреть листинг entrypoint.sh для redmine, то можно заметить установку плагинов (bundles) для redmine. Далее, если файла $/tmp/plugins.sha1 не существует, то происходит установка плагинов. Обратите внимание на переменную $ и посмотрите в Dockerfile для redmine, т.е. REDMINE_DATA_DIR входит в волиум. Вспоминаем, что при коммите данные волиума не заносятся в образ. Когда закоммиченый контейнер запускается на новой машине видимо возникает конфликт старой версии redmine и устанавливаемых вновь плагинов.

Если данные redmine критичны ( /srv/docker/redmine/redmine:/home/redmine/data ), то их обязательно нужно перенести на новую машину. Далее, поднять либо закоммиченый образ, либо загрузить контейнер с уже новой версией redmine по той инструкции.

Можете ознакомится со всеми доступными версиями redmine образов от sameersbn.

Что касается PostgreSQL контейнера, то его данные ( /srv/docker/redmine/postgresql:/var/lib/postgresql ) обязательно необходимо перенести.

Загрузка образов

Загрузка образов из registry (https://hub.docker.com/, https://quay.io/, можно даже поднять локальный) осуществляется с помощь команды

, где тег — это, как правило, версия софта, который находится в этом образе.

Запуск контейнера происходит командой

Если образа с таким именем и тегом на локальной машине нет, то прозрачно срабатывает команда docker pull , т.е. образ ищется на удалённых registry.

По умолчанию контейнеры и образы для docker лежат в /var/lib/docker. Если необходимо изменить расположение, то необходимо сделать следующие манипуляции. Данный перенос актуален для версии 1.12.6 Docker’а и Centos 7.
Для начала проверим где расположена директория для образов и контейнеров:

У меня это /var/lib/docker. Остановим службу docker:

Скопируем директорию в новое расположение. Например в /mnt/docker

Дождемся окончания копирования. Далее необходимо прописать этот путь в файле /etc/docker/daemon.json:

Проверяем, что директория действительно изменилась:

Проверим, что контейнеры на месте:

Проверим запустится ли hello world и другие контейнеры:

После этого можно удалить директорию из которой переносили контейнеры:

Оцените статью