Estaba usando Docker de la manera anterior, con un contenedor de volumen:
docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins"
Pero ahora cambié a la nueva forma creando un volumen con nombre:
docker volume create --name my-jenkins-volume
Adjunté este nuevo volumen a un nuevo contenedor Jenkins. Lo único que me queda es una carpeta en la que tengo el /var/jenkins_home
contenedor jenkins anterior. (usando docker cp
) Ahora quiero llenar mi nuevo volumen nombrado con el contenido de esa carpeta.
¿Puedo copiar el contenido de esa carpeta /var/lib/jenkins/volume/my-jenkins-volume/_data
?
docker volume inspect my-jenkins-volume --format '{{.Mountpoint}}'
para obtener su ubicación física mediante programación. Sin embargo, todavía no se siente como una gran idea.docker cp
y eliminarlo./var/lib/docker/volumes/my-jenkins-volume/_data
al usar Docker para Mac no funciona porque los archivos se almacenan dentro de la máquina virtual xhyve . Ver forums.docker.com/t/var-lib-docker-does-not-exist-on-host/18314Puede reducir la respuesta aceptada a una línea usando, por ejemplo
fuente
-v `pwd`:/src
implica eso que el comando se está ejecutando en el host? (¿Cómo puede el host mapearpwd
si es una máquina diferente, por ejemplo? - no puede). Si el comando docker no se está ejecutando en el host, esto no funciona. Creo que es por eso que tenemos docker cp. Esto parece que no es "el camino" para la ventana acoplable; es solo un caso especial que funciona solo cuando el comando de la ventana acoplable se ejecuta en el host. ¿Entiendo correctamente?pwd
debe resolverse en un archivo en la máquina host. De la documentación de montaje de la ventana acoplable: "En el caso de los montajes vinculantes, el primer campo es la ruta al archivo o directorio en la máquina host".pwd
lo que ni siquiera necesita existir en el host remoto. En cambio, la solución de Dmytro Melnychuk (create + cp + rm) copia los locales en el contenedor sin importar dónde se esté ejecutando.No necesita iniciar algún contenedor para agregar datos a un volumen con nombre ya existente, simplemente cree un contenedor y copie los datos allí:
fuente
hello-world
y también funciona.busybox
es de 1,22 MB. En cambio,hello-world
es 13,3kB. La pregunta es: de la misma manera que podemos hacer un Dockerfile DESDE cero, ¿podríamos hacer una "creación de contenedor docker" con "nada" como imagen, ya que solo queremos "montar" el volumen y nunca iniciar el contenedor?docker cp
esdocker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
Estos son los pasos para copiar el contenido de ~ / data al volumen de la ventana acoplable llamado my-vol
Paso 1. Adjunte el volumen a un contenedor "temporal". Para eso, ejecute en la terminal este comando:
docker run --rm -it --name alpine --mount type=volume,source=my-vol,target=/data alpine
Paso 2. Copie el contenido de ~ / data en my-vol . Para eso, ejecute estos comandos en una nueva ventana de terminal:
cd ~/data docker cp . alpine:/data
Esto copiará el contenido de ~ / data en my-vol volume. Después de copiar, salga del contenedor temporal.
fuente