ПРИМЕЧАНИЕ. Я новичок в 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. Далее, если файла $
Если данные 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 и другие контейнеры:
После этого можно удалить директорию из которой переносили контейнеры: