Contenido
Tutorial de docker cp: copia archivos entre el host y un contenedor
docker cp copia archivos entre el host y un contenedor. Funciona tanto si el contenedor está en marcha como si está detenido.
Sintaxis
docker cp [OPCIONES] CONTENEDOR:RUTA-ORIGEN DESTINO-EN-HOST # contenedor → host
docker cp [OPCIONES] RUTA-ORIGEN-EN-HOST CONTENEDOR:RUTA-DESTINO # host → contenedor
| Opción | Descripción |
|---|---|
-a, --archive | Conserva la información de propietario (uid/gid) |
-L, --follow-link | Si el origen es un enlace simbólico, copia el archivo al que apunta |
-q, --quiet | No muestra el progreso de la copia |
Si usas - como origen o destino, se lee de la entrada estándar o se escribe en la salida estándar en formato tar.
Ejemplos
Ejecuta estos comandos con un contenedor nginx llamado web:
$ docker cp web:/etc/nginx/nginx.conf ./nginx.conf
$ head -n 3 nginx.conf
user nginx;
worker_processes auto;
$ echo "<h1>copied in</h1>" > page.html
$ docker cp page.html web:/usr/share/nginx/html/page.html
$ docker exec web cat /usr/share/nginx/html/page.html
<h1>copied in</h1>
$ docker cp web:/etc/nginx/conf.d ./confd
$ ls confd
default.conf
$ docker cp web:/no/such/file .
Error response from daemon: Could not find the file /no/such/file in container web
| Comando | Descripción |
|---|---|
docker cp web:/etc/nginx/nginx.conf ./nginx.conf | Copia el archivo de configuración del contenedor al host; se suele usar para obtener la configuración por defecto antes de editarla |
docker cp page.html web:/usr/share/nginx/html/page.html | Copia un archivo del host al contenedor |
docker cp web:/etc/nginx/conf.d ./confd | Copia una carpeta entera. Si el destino confd no existe, Docker lo crea y coloca dentro el contenido de la carpeta |
docker cp web:/no/such/file . | Error que aparece cuando el origen no existe |
Reglas al copiar carpetas:
- El destino no existe: se crea la carpeta de destino y se copia dentro el contenido de la carpeta de origen (como en el ejemplo anterior).
- El destino ya existe: la carpeta de origen entera queda dentro del destino, como
destino/nombre-carpeta-origen. - La ruta de origen termina en
/.(por ejemplo,web:/etc/nginx/conf.d/.): se copia solo el contenido, no la carpeta.
Cuándo usar docker cp
Casos adecuados:
- Sacar del contenedor archivos de configuración por defecto, registros o archivos generados.
- Copiar temporalmente un archivo al contenedor para hacer pruebas.
- Hacer copias de seguridad y restaurar bases de datos en Windows PowerShell: primero exportas a un archivo dentro del contenedor y luego lo copias fuera con
docker cp. Así evitas que PowerShell no admita<y los problemas de codificación (consulta Mensajes de error comunes).
Casos no adecuados:
- Sincronizar código durante el desarrollo: usa un bind mount o
docker compose watch(consulta Aplicaciones Node.js). - Datos que debas conservar: usa un Volume.
Capítulos relacionados
Ejercicios
Ejercicio: copia la página de bienvenida de nginx /usr/share/nginx/html/index.html del contenedor web al host, cambia el título y vuelve a copiarla. Comprueba el resultado en el navegador (inicia el contenedor con -p 8080:80).
Respuesta
docker cp web:/usr/share/nginx/html/index.html ./index.html
# Edita index.html con un editor
docker cp ./index.html web:/usr/share/nginx/html/index.html
Actualiza http://localhost:8080 para ver el cambio. El cambio desaparece al eliminar el contenedor.
Preguntas frecuentes
¿Puedo usar docker cp con un contenedor detenido?
Sí. docker cp lee y escribe directamente en el sistema de archivos del contenedor, así que puedes copiar archivos aunque esté detenido. Es útil cuando un contenedor no arranca y necesitas sacar un archivo de configuración o un registro para revisarlo.
¿Se conserva un archivo de configuración que cambié con docker cp al recrear el contenedor?
No. Los archivos copiados al contenedor están en su capa de escritura y desaparecen al eliminarlo. Para los archivos que debas conservar, usa un bind mount o inclúyelos en la imagen.
¿Existe un comando equivalente en docker compose?
Sí: docker compose cp servicio:ruta destino. La sintaxis es la misma, pero con el nombre del servicio en lugar del nombre del contenedor.
Actualizado 14 de octubre de 2026