Eu tentei uma imagem docker usando a linha de comando docker sem especificar nomes para volumes. Agora descobri que quero continuar usando este contêiner / imagem, mas definindo o contêiner no Docker compose.
O que é recomendado para manter os dados dos volumes anônimos/não identificados e usá-los no novo contêiner criado pelo docker compose?
Posso de alguma forma converter o sem nome em volumes nomeados?
ou devo criar um novo contêiner com Docker compose com volumes nomeados e copiar os dados?
Este método tem o benefício de usar a API docker. Ele usa uma imagem Linux leve chamada alpine e seu shell padrão, ash para executar uma cópia de arquivo, cp -av do volume antigo ao volume recém-nomeado.
No momento, você não pode renomear volumes existentes. (Isso é verdade se eles foram nomeados anteriormente ou não e tiveram seus nomes gerados automaticamente.)
Você pode ver problema para obter mais informações sobre a implementação desse recurso, além de adicionar seus "+1"/"polegares para cima" para que os desenvolvedores saibam que você deseja.
Sem isso, até onde eu sei, a única boa maneira de fazer isso é criar o novo volume nomeado e copiar os dados.
No momento da escrita, a única opção é copiar os dados. Os detalhes podem variar dependendo da sua configuração específica. A lista geral de etapas a serem executadas é a seguinte:
Pare e remova o contêiner de origem para permitir que o novo volume seja criado na Etapa 3.
docker stop NAMEdocker rm NAME# ordocker-compose stop SERVICEdocker-compose rm SERVICE
Em alguns casos, você pode adiar a remoção do contêiner de origem, por exemplo, ao mudar de docker-compose volume anônimo para docker-compose volume nomeado. Neste caso up criaria o novo volume. E você pode prosseguir com a cópia dos dados. Mas, mesmo neste caso, é aconselhável interromper o contêiner para evitar que os dados sejam alterados conforme você os copia. E você tem que remover o contêiner de origem para docker-compose para mudar para o novo volume (preste atenção aos avisos).
Em alguns casos, não é realmente necessário, por exemplo, ao mudar de contêineres autônomos para docker-compose.
Alterar docker-compose.yml se aplicável.
Inicie o novo contêiner para que o novo volume seja criado.
Contêineres autônomos:
docker run ...# ordocker-compose up -d
Pare o novo contêiner para evitar que os dados sejam alterados.
docker stop ...# ordocker-compose stop
No caso de migrar para, por exemplo, um contêiner autônomo com um volume nomeado, você pode apenas criar o volume no lugar de iniciar/interromper o contêiner.
Copie os dados.
docker run --rm -v "SRC_VOLUME:/from" -v "DST_VOLUME:/to" \ bash -c ' shopt -s dotglob # rm -r /to/* # e.g. pg might have populated the new volume cp -r /from/* /to '
Onde SRC_VOLUME, dst_volume-nome do volume, id ou caminho absoluto para um diretório no host.