2013-04-16 3 views
32

Я хотел бы приостановить контейнер Докера и возобновить его после. Как это можно сделать? Подключив, я хочу сказать, что он должен сохранять состояние текущего процесса (например, кодирование видео), а затем возобновлять его в любое время.Могу ли я приостановить, а затем возобновить контейнер Docker?

ответ

41

По Version 0.12.0, Docker поддерживает PAUSE и UNPAUSE команды для приостановки и возобновления контейнеров с использованием морозильной камеры контрольной группы.

+2

Когда вы замораживаете контейнер, значит ли это, что он больше не может принимать какие-либо запросы? Что происходит, когда вы отправляете запрос на него? Он поставлен в очередь? Брошено? – CMCDragonkai

+1

@David Gageot: есть ли возможность клонировать приостановленные докерные контейнеры? – noisy

+1

@noisy Не знаю, о чем я знаю. Ближайшим решением является использование CRIU http://criu.org/Docker –

7

AFAIK прямо сейчас это не может быть сделано с помощью чистого докера, но lxc поддерживает это. Я поиграться немного с грузчиком и подтвердил, что это может быть сделано с lxc-freeze -n <containtr.id> и возобновить операции lxc-unfreeze -n <container.id> Но в v0.2.0 докер пс дает только сократить containter идентификатор даже с -notrunc и LXC-LS выход пусто в моей системе (странно, нужно больше узнать об этом, поскольку докер использует простой lxc-start с параметрами, поэтому lxc-ps должен печатать это). Я нашел полный идентификатор контейнера с lxc-ps. Было бы неплохо добавить команду замораживания докеров. Может быть, мне пора научиться чему-то идти :)

+1

Вы можете использовать 'docker check $ container' для получения длинного идентификатора. – ZeissS

+1

Я добавил полный идентификатор контейнера, когда используется -notrunc, а изменение уже находится в ветке docker git master. Но спасибо за подсказку. – odk

+0

Я нашел, что из версии 0.9 LXC больше не является драйвером по умолчанию для докеров (https://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/) , Однако есть возможность использовать lxc. Для этого вам нужно убить демона докеров и перезапустить его с помощью переключателя 'docker -d -e lxc' – noisy

1

Docker только что выпустил (пока что) недокументированные тома и набор функций хранения данных. tl; dr, если вы используете опцию командной строки -v, вы можете указать путь для отображения за пределами контейнера на специальный путь докера (/var/lib/docker/volumes/{FULL_ID}), где FULL_ID можно найти по docker inspect container_id. Пример: docker run -d -v /data danielvf/myapp:1.0 runapp, который будет экстернализировать каталог /data в объеме докера.

https://github.com/dotcloud/docker/issues/111

Дорожная карта для этой функции: (пока не документировать его существование): https://github.com/dotcloud/docker/wiki/Volumes-&-persistent-data-storage

Смежные вопросы