Подтвердить что ты не робот

Как переместить контейнеры Docker между разными хостами?

Я не могу найти способ перемещения докеров, запускающих контейнеры, с одного хоста на другой.

Можно ли как-нибудь отправить свои контейнеры в репозитории, как мы делаем для изображений? В настоящее время я не использую тома данных для хранения данных, связанных с приложениями, работающими внутри контейнеров. Поэтому некоторые данные находятся внутри контейнеров, которые я хочу сохранить до изменения настроек.

4b9b3361

Ответ 1

Вы не можете переместить работающий докер-контейнер с одного хоста на другой.

Вы можете зафиксировать изменения в своем контейнере для изображения с помощью docker commit, переместить изображение на новый хост и затем запустить новый контейнер с помощью docker run. Это сохранит все данные, созданные вашим приложением внутри контейнера.

Nb: Он не сохраняет данные, которые хранятся внутри томов; вам нужно переместить тома данных вручную на новый хост.

Ответ 2

В качестве альтернативы, если вы не хотите отправлять в хранилище:

  1. Экспортировать контейнер в тарболл

    docker export <CONTAINER ID> > /home/export.tar
    
  2. Переместите свой тарбол на новую машину

  3. Импортировать обратно

    cat /home/export.tar | docker import - some-name:latest
    

Ответ 3

В конце концов, после многих запутанных руководств и запутанных учебных пособий у меня сработало то, что Докер, очевидно, в момент моего написания на взгляде завышенных ожиданий, это:

  1. Сохраните изображение докера в архив:
    docker save image_name > image_name.tar
  2. скопировать на другую машину
  3. на другом компьютере Docker запустите загрузку Docker следующим образом:
    cat image_name.tar | docker load

Экспорт и импорт, как предлагается в других ответах, не экспортируют порты и переменные, которые могут потребоваться для работы вашего контейнера. И у вас могут возникнуть такие вещи, как "Команда не указана" и т.д.... при попытке загрузить ее на другой компьютер.

Таким образом, разница между сохранением и экспортом заключается в том, что команда сохранения сохраняет все изображение с историей и метаданными, а команда экспорта экспортирует только структуру файлов (без истории или метаданных).

Само собой разумеется, что, если у вас уже есть эти порты, занятые гипервизором докера, который вы выполняете импортом, через какой-то другой докер-контейнер, вы окажетесь в конфликте и вам придется перенастроить открытые порты.

Ответ 4

Из документации Docker:

docker export не экспортирует содержимое связанных томов с контейнером. Если объем установлен поверх существующего каталог в контейнере, docker export будет экспортировать содержимое основного каталога, а не содержимого тома. обращаться to Резервное копирование, восстановление или миграция данных объемыв руководстве пользователя для примеров по экспорту данных в томе.

Другие внешние инструменты: Чтобы переместить контейнер со связанным с ним объемом данных, вы можете использовать Flocker https://clusterhq.com/flocker/introduction/

Ответ 5

Используйте этот скрипт: https://github.com/ricardobranco777/docker-volumes.sh

Это сохраняет данные в объемах.

Пример использования:

# Stop the container   
docker stop $CONTAINER

# Create a new image   
docker commit $CONTAINER $CONTAINER

# Save image
docker save -o $CONTAINER.tar $CONTAINER

# Save the volumes (use ".tar.gz" if you want compression)
docker-volumes.sh $CONTAINER save $CONTAINER-volumes.tar

# Copy image and volumes to another host
scp $CONTAINER.tar $CONTAINER-volumes.tar [email protected]$HOST:

# On the other host:
docker load -i $CONTAINER.tar
docker create --name $CONTAINER [<PREVIOUS CONTAINER OPTIONS>] $CONTAINER

# Load the volumes
docker-volumes.sh $CONTAINER load $CONTAINER-volumes.tar

# Start container
docker start $CONTAINER

Ответ 6

Я пробовал много решений для этого, и это то, что работает для меня:

1. сохранить/сохранить контейнер в новом изображении:

  1. ++ зафиксировать контейнер:
    # остановка докера
    # docker commit CONTAINER_NAME
    # docker save --output IMAGE_NAME.tar IMAGE_NAME: TAG

ps: "Наш контейнер CONTAINER_NAME имеет смонтированный том в"/var/home "" (вы должны проверить свой контейнер, чтобы указать путь к нему: # docker inspect CONTAINER_NAME)

  1. ++ сохранить его объем: мы будем использовать образ Ubuntu, чтобы сделать это.
    # Резервное копирование mkdir
    # docker run --rm - -v в полях - от CONTAINER_NAME -v $ {pwd}/backup: /backup ubuntu bash -c "cd/var/home && tar cvf/backup/volume_backup.tar."

Теперь, когда вы посмотрите на $ {pwd}/backup, вы найдете наш том в формате tar.
До сих пор у нас есть изображение conatainer 'IMAGE_NAME.tar' и его том 'volume_backup.tar'.

Теперь вы можете воссоздать тот же старый контейнер на новом хосте.