Я не могу найти способ переместить контейнеры с запущенным докером с одного хоста на другой.
Можно ли каким-то образом отправить свои контейнеры в репозитории, как мы делаем это для изображений? В настоящее время я не использую тома данных для хранения данных, связанных с приложениями, работающими внутри контейнеров. Таким образом, некоторые данные находятся внутри контейнеров, и я хочу сохранить их перед изменением конфигурации.
docker
containers
docker-registry
Динеш Редди
источник
источник
docker save
предназначен для сохранения изображений, а не контейнеров. docs.docker.com/engine/reference/commandline/saveОтветы:
Вы не можете переместить работающий док-контейнер с одного хоста на другой.
Вы можете зафиксировать изменения в вашем контейнере в образе с помощью
docker commit
, переместить изображение на новый хост, а затем запустить новый контейнер с помощьюdocker run
. Это сохранит все данные, которые ваше приложение создало внутри контейнера.Nb: он не сохраняет данные, которые хранятся внутри томов; вам необходимо вручную переместить тома данных на новый хост.
источник
docker stop x
; 2. зафиксировать изменения urdocker commit -p x x
; 3. сохранить контейнер в образdocker save -o x x
; 4. переместите файл x на новый хост и на новом хосте загрузите новый образdokcer load -i x
(если вы запустили контейнер с-v
опцией, вам также придется переместить эти файлы на новый хост); 5. запустите это изображение с помощьюdocker run (-v is required to mount these files if needed)
В качестве альтернативы, если вы не хотите отправлять данные в репозиторий:
Экспорт контейнера в архив
Переместите ваш tarball на новую машину
Импортировать обратно
источник
Что в конечном итоге сработало для меня, после множества запутанных руководств и запутанных руководств, поскольку Docker, очевидно, на момент написания моей статьи был на грани завышенных ожиданий , так это:
docker save image_name > image_name.tar
cat image_name.tar | docker load
Экспорт и импорт, как предлагается в других ответах, не экспортируют порты и переменные, которые могут потребоваться для запуска вашего контейнера. И вы можете получить что-то вроде «Команда не указана» и т. Д. Когда вы пытаетесь загрузить ее на другой компьютер.
Итак, разница между сохранением и экспортом заключается в том, что команда сохранения сохраняет все изображение с историей и метаданными, а команда экспорта экспортирует только структуру файлов (без истории или метаданных).
Излишне говорить, что, если у вас уже есть эти порты, задействованные в гипервизоре докеров, который вы импортируете, каким-либо другим контейнером докеров, вы столкнетесь с конфликтом, и вам придется перенастроить открытые порты.
источник
Из документации Docker:
источник
Используйте этот скрипт: https://github.com/ricardobranco777/docker-volumes.sh
Это делает сохранение данных в объемах.
Пример использования:
источник
Я пробовал много решений для этого, и это то, что у меня сработало:
1. зафиксировать / сохранить контейнер в новый образ:
# docker stop
# docker commit CONTAINER_NAME
# docker save --output IMAGE_NAME.tar IMAGE_NAME: TAG
ps: "В нашем контейнере CONTAINER_NAME есть смонтированный том в '/ var / home'" (вы должны проверить свой контейнер, чтобы указать путь к его тому: # docker inspect CONTAINER_NAME)
# mkdir backup
# docker run --rm --volumes-from CONTAINER_NAME -v $ {pwd} / backup: / backup ubuntu bash -c «cd / var / home && tar cvf /backup/volume_backup.tar.»
Теперь, когда вы посмотрите на $ {pwd} / backup, вы найдете наш том в формате tar.
До сих пор у нас есть изображение нашего контейнера 'IMAGE_NAME.tar' и его том volume_backup.tar.
Теперь вы можете воссоздать тот же старый контейнер на новом хосте.
источник