Não consigo encontrar uma maneira de mover contêineres de execução do docker de um host para outro.
Existe alguma maneira de enviar meus contêineres para repositórios como fazemos para imagens? Atualmente, não estou usando volumes de dados para armazenar os dados associados a aplicativos executados dentro de contêineres. Portanto, alguns dados residem dentro de contêineres, que desejo persistir antes de reprojetar a configuração.
docker
containers
docker-registry
Dinesh Reddy
fonte
fonte
docker save
é para salvar imagens, não contêineres. docs.docker.com/engine/reference/commandline/saveRespostas:
Você não pode mover um contêiner do docker em execução de um host para outro.
Você pode confirmar as alterações em seu contêiner para uma imagem com
docker commit
, mover a imagem para um novo host e, em seguida, iniciar um novo contêiner comdocker run
. Isso preservará todos os dados que seu aplicativo criou dentro do contêiner.Nb: não preserva os dados armazenados nos volumes; você precisa mover os volumes de dados manualmente para o novo host.
fonte
docker stop x
; 2. cometer suas alteraçõesdocker commit -p x x
; 3. salve o container na imagemdocker save -o x x
; 4. mova o arquivo x para o novo host e no novo host carregue a nova imagemdokcer load -i x
(se você iniciou o contêiner com a-v
opção, também terá que mover esses arquivos para o novo host); 5. execute esta imagem comdocker run (-v is required to mount these files if needed)
Como alternativa, se você não deseja enviar para um repositório:
Exporte o contêiner para um tarball
Mova seu tarball para uma nova máquina
Importar de volta
fonte
O que funcionou para mim, depois de muitos manuais e tutoriais confusos, uma vez que Docker obviamente está no momento da minha escrita com um vislumbre de expectativas infladas , é:
docker save image_name > image_name.tar
cat image_name.tar | docker load
Exportar e importar, conforme proposto em outras respostas, não exporta portas e variáveis, que podem ser necessárias para o funcionamento do seu contêiner. E você pode acabar com coisas como "Nenhum comando especificado" etc ... Quando você tenta carregá-lo em outra máquina.
Portanto, a diferença entre salvar e exportar é que o comando salvar salva a imagem inteira com histórico e metadados, enquanto o comando export exporta apenas a estrutura dos arquivos (sem histórico ou metadados).
Desnecessário dizer é que, se você já tem essas portas tomadas no docker hyper-visor que você está importando, por algum outro docker container, você acabará em conflito e terá que reconfigurar as portas expostas.
fonte
Da documentação do Docker:
fonte
Use este script: https://github.com/ricardobranco777/docker-volumes.sh
Isso faz preservar os dados em volumes.
Exemplo de uso:
fonte
Tentei muitas soluções para isso, e esta é a que funcionou para mim:
1.commit / salvar contêiner para uma nova imagem:
# docker stop
# docker commit CONTAINER_NAME
# docker save --output IMAGE_NAME.tar IMAGE_NAME: TAG
ps: "Nosso contêiner CONTAINER_NAME tem um volume montado em '/ var / home'" (você deve inspecionar seu contêiner para especificar o caminho do volume: # docker inspect CONTAINER_NAME)
# backup mkdir
# docker run --rm --volumes-from CONTAINER_NAME -v $ {pwd} / backup: / backup ubuntu bash -c “cd / var / home && tar cvf /backup/volume_backup.tar.”
Agora, ao olhar para $ {pwd} / backup, você encontrará nosso volume no formato tar.
Até agora, temos a imagem do nosso conatainer 'IMAGE_NAME.tar' e seu volume 'volume_backup.tar'.
Agora você pode recriar o mesmo contêiner antigo em um novo host.
fonte