Eu estava usando o Docker da maneira antiga, com um contêiner de volume:
docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins"
Mas agora mudei para a nova forma criando um volume nomeado:
docker volume create --name my-jenkins-volume
Amarrei este novo volume a um novo recipiente Jenkins. A única coisa que deixei é uma pasta na qual tenho o /var/jenkins_home
do meu contêiner jenkins anterior. (usando docker cp
) Agora, quero preencher meu novo volume nomeado com o conteúdo dessa pasta.
Posso apenas copiar o conteúdo dessa pasta para /var/lib/jenkins/volume/my-jenkins-volume/_data
?
docker volume inspect my-jenkins-volume --format '{{.Mountpoint}}'
para obter sua localização física de forma programática. Ainda assim, não parece uma boa ideia.docker cp
e removê-lo./var/lib/docker/volumes/my-jenkins-volume/_data
ao usar o Docker para Mac não funciona porque os arquivos são armazenados dentro da máquina virtual xhyve . Consulte forum.docker.com/t/var-lib-docker-does-not-exist-on-host/18314Você pode reduzir a resposta aceita a uma linha usando, por exemplo,
fonte
-v `pwd`:/src
significa que o comando está sendo executado no host? (Como o host pode mapearpwd
se for uma máquina diferente, por exemplo? - não pode.) Se o comando docker não estiver sendo executado no host, isso não funciona. Eu acredito que é por isso que temos docker cp. Parece que não é "o caminho" para o docker - é apenas um caso especial que funciona apenas quando o comando docker está em execução no host. Eu compreendo corretamente?pwd
deve resolver para um arquivo na máquina host. Da documentação de montagem do docker: "No caso de montagens de ligação, o primeiro campo é o caminho para o arquivo ou diretório na máquina host."pwd
que nem mesmo precisa existir no host remoto. Em vez disso, a solução de Dmytro Melnychuk (create + cp + rm) copia os locais para o contêiner, não importa onde esteja sendo executado.Você não precisa iniciar algum contêiner para adicionar dados a um volume nomeado já existente, apenas crie um contêiner e copie os dados nele:
fonte
hello-world
e também funciona.busybox
é 1,22 MB. Em vez disso,hello-world
são 13,3 kB. A questão é: da mesma forma que podemos fazer um Dockerfile DO zero, poderíamos fazer uma "criação de contêiner docker" com "nada" como a imagem, pois queremos apenas "montar" o volume e nunca iniciar o contêiner?docker cp
édocker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
Aqui estão as etapas para copiar o conteúdo de ~ / data para o volume do docker chamado my-vol
Etapa 1. Anexe o volume a um recipiente "temporário". Para que execute no terminal este comando:
docker run --rm -it --name alpine --mount type=volume,source=my-vol,target=/data alpine
Etapa 2. Copie o conteúdo de ~ / data em my-vol . Para isso, execute estes comandos na nova janela do terminal:
cd ~/data docker cp . alpine:/data
Isso copiará o conteúdo de ~ / data para o volume my-vol . Após a cópia, saia do contêiner temporário.
fonte