docker container cp
| Descripción | Copia archivos o carpetas entre un contenedor y el sistema de archivos local |
|---|---|
| Uso | docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH |
| Alias | docker cp |
Descripción
La utilidad docker cp copia el contenido de SRC_PATH en DEST_PATH.
Puedes copiar desde el sistema de archivos del contenedor a la máquina local o a la
inversa, desde el sistema de archivos local al contenedor. Si se especifica - para
SRC_PATH o DEST_PATH, también puedes transmitir un archivo tar desde
STDIN o hacia STDOUT. El CONTAINER puede ser un contenedor en ejecución o detenido.
SRC_PATH o DEST_PATH pueden ser un archivo o un directorio.
El comando docker cp asume que las rutas del contenedor son relativas al directorio
/ (raíz) del contenedor. Esto significa que suministrar la barra diagonal inicial es opcional;
el comando ve compassionate_darwin:/tmp/foo/myfile.txt y
compassionate_darwin:tmp/foo/myfile.txt como idénticos. Las rutas de la máquina local pueden
ser valores absolutos o relativos. El comando interpreta las rutas relativas de una máquina local
como relativas al directorio de trabajo actual desde donde se ejecuta docker cp.
El comando cp se comporta como el comando de Unix cp -a en el sentido de que los directorios se
copian de forma recursiva conservando los permisos si es posible. La propiedad se establece en el
usuario y el grupo principal en el destino. Por ejemplo, los archivos copiados a un
contenedor se crean con el UID:GID del usuario root. Los archivos copiados a la máquina local
se crean con el UID:GID del usuario que invocó el comando docker cp. Sin embargo, si especificas la opción -a, docker cp establece la propiedad al usuario y grupo principal en el origen.
Si especificas la opción -L, docker cp sigue cualquier enlace simbólico
en SRC_PATH. docker cp no crea directorios padre para
DEST_PATH si no existen.
Suponiendo un separador de ruta /, un primer argumento de SRC_PATH y un segundo
argumento de DEST_PATH, el comportamiento es el siguiente:
SRC_PATHespecifica un archivoDEST_PATHno existe- el archivo se guarda en un archivo creado en
DEST_PATH
- el archivo se guarda en un archivo creado en
DEST_PATHno existe y termina con/- Condición de error: el directorio de destino debe existir.
DEST_PATHexiste y es un archivo- el destino se sobrescribe con el contenido del archivo de origen
DEST_PATHexiste y es un directorio- el archivo se copia en este directorio utilizando el nombre base (basename) de
SRC_PATH
- el archivo se copia en este directorio utilizando el nombre base (basename) de
SRC_PATHespecifica un directorioDEST_PATHno existeDEST_PATHse crea como un directorio y el contenido del directorio de origen se copia en este directorio
DEST_PATHexiste y es un archivo- Condición de error: no se puede copiar un directorio en un archivo
DEST_PATHexiste y es un directorioSRC_PATHno termina con/.(es decir: barra seguida de punto)- el directorio de origen se copia dentro de este directorio
SRC_PATHsí termina con/.(es decir: barra seguida de punto)- el contenido del directorio de origen se copia dentro de este directorio
El comando requiere que SRC_PATH y DEST_PATH existan de acuerdo con las reglas
anteriores. Si SRC_PATH is local y es un enlace simbólico, por defecto se copia el enlace simbólico y no
el destino. Para copiar el destino del enlace y no el enlace en sí, especifica la opción -L.
Se usan dos puntos (:) como delimitador entre el CONTAINER y su ruta. También puedes
usar : al especificar rutas a un SRC_PATH o DEST_PATH en una máquina local,
por ejemplo archivo:nombre.txt. Si usas : en una ruta de la máquina local,
debes ser explícito con una ruta relativa o absoluta, por ejemplo:
`/ruta/al/archivo:nombre.txt` o `./archivo:nombre.txt`
Opciones
| Opción | Predeterminado | Descripción |
|---|---|---|
-a, --archive | Modo de archivo (copia toda la información de uid/gid) | |
-L, --follow-link | Sigue siempre los enlaces simbólicos en SRC_PATH | |
-q, --quiet | Suprime la salida del progreso durante la copia. La salida del progreso se suprime automáticamente si no hay una terminal conectada |
Ejemplos
Copiar un archivo local en el contenedor
$ docker cp ./some_file CONTAINER:/work
Copiar archivos desde el contenedor a la ruta local
$ docker cp CONTAINER:/var/logs/ /tmp/app_logs
Copiar un archivo desde el contenedor a la salida estándar (stdout). Ten en cuenta que el comando cp produce un flujo tar
$ docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"
Casos particulares
No es posible copiar ciertos archivos del sistema como recursos bajo /proc, /sys, /dev,
tmpfs, y montajes creados por el usuario en el contenedor. Sin embargo, puedes copiar dichos archivos ejecutando manualmente tar en docker exec. Los dos ejemplos siguientes hacen lo mismo de maneras diferentes (considerando que SRC_PATH y DEST_PATH son directorios):
$ docker exec CONTAINER tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | tar Cxf DEST_PATH -
$ tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | docker exec -i CONTAINER tar Cxf DEST_PATH -
Usar - como SRC_PATH transmite el contenido de STDIN como un archivo tar. El comando extrae el contenido del tar en el DEST_PATH del sistema de archivos del contenedor. En este caso, DEST_PATH debe especificar un directorio. Usar - como DEST_PATH transmite el contenido del recurso como un archivo tar a STDOUT.