2015-12-22 15 views
1

С помощью Саеда Казем я был в состоянии контрольно-пропускной пункт и перенести контейнер с помощью criu на убунту 14 этого docker suspend and resume using criuDocker Контейнер миграция с criu

Теперь я пытаюсь перенести этот контейнер из одного места в другое.

Я использую следующие действия:

export cid=$(docker run -d ubuntu tail -f /dev/null) 
docker exec $cid touch /test.walid 
mkdir /tmp/docker-migration 
mkdir /tmp/docker-migration/$cid 
docker checkpoint --image-dir=/tmp/docker-migration/$cid $cid 
ssh [email protected] mkdir /tmp/docker-migration 
ssh [email protected] mkdir /tmp/docker-migration/$cid 
scp -r /tmp/docker-migration/$cid [email protected]:/tmp/docker-migration 
ssh [email protected] mkdir /tmp/$cid 
scp -r /var/lib/docker/0.0/containers/$cid [email protected]:/tmp 
ssh -t [email protected] sudo mv /tmp/$cid /var/lib/docker/0.0/containers/ 
ssh -t [email protected] sudo docker restore --force=true --image-dir=/tmp/docker-migration/$cid $cid 

и получил этот ответ

ошибки от демона: Нет такой контейнер: fea338e81750b2377c2a845e30c49b7055519e39448091715c2c6a7896da3562 Ошибки: не удалось восстановить один или несколько контейнеров

Оба Машины имеют докер и criu установлены и контрольно-пропускной пункт работает в одиночку.

ответ

1

Перемещение контейнеров докеров с использованием CRIU все еще находится в разработке. До сих пор фокус контрольной точки и восстановление интеграции в Docker был C/R'ing на той же машине.

Тем не менее, можно вручную перенести контейнеры, не только копирование контейнера образ, созданный CRIU после контрольной точки (как вы сделали), но также путем копирования каталога контейнера созданный Докер в/вар/Библиотека/docker/0.0/container/$ cid , а также корневую файловую систему контейнера в /var/lib/docker/0.0/image. Ручная миграция файловой системы контейнера немного сложна, особенно если вы используете объединенную файловую систему, такую ​​как AUFS или OverlayFS. Кроме того, для просмотра контейнера необходимо перезапустить демон Docker на конечной машине.

0

На машине назначения вам необходимо создать или запустить контейнер. Этот контейнер будет перезаписан восстановленным изображением.

Итак: SSH -t [email protected] экспорт NewID = $ (докер запуск -d убунт хвост -f/DEV/нуль) SSH -t [email protected] Судо докер восстановить --force = истина --image-dir =/tmp/docker-migration/$ cid $ newID

В моем случае это работало как шарм!

+0

Это позволит вам потерять идентификатор контейнера, любые данные, которые вы изменили в файловой системе, и проверить @Saied Comment –

0

вот мой тест:

контейнер миграции через узлы.

восстановления: бродячую SSH VM2 - 'Докер запустить --name = Foo -d убунту хвост -f/DEV/нуль & & докер гт -f Foo'

docker create --name=CONTAINNER_NAME base_image 

docker restore --force=true --image-dir=/tmp/{dump files} 

github: https://github.com/hixichen/criu_test

+0

Неясно, вы публикуете решение проблемы OP или у вас есть аналогичная проблема, и вы отправляете свой код, который не работает. Вы можете уточнить? – shoover

+0

Извините, я должен сделать это ясно. Я столкнулся с той же проблемой, но когда я запускаю «docker run --name = foo -d ubuntu tail -f/dev/null && docker rm -f foo». Я получил правильное восстановление. – xichen

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