Si necesitas copiar archivos desde el host de Docker a tu contenedor Docker, este tutorial es para ti.
En este tutorial, aprenderás a copiar archivos desde el host de Docker a un contenedor Docker utilizando diversos enfoques.
¡Comencemos!
Prerrequisitos
Si deseas seguir paso a paso, asegúrate de tener lo siguiente:
- A Linux host. This tutorial uses Ubuntu 18.04.5 LTS.
- Docker instalado en el host de Linux. Este tutorial utiliza Docker v19.03.11. Puedes confirmar tu versión de Docker ejecutando
docker version
.
- Cualquier imagen de Docker descargada y disponible. Este tutorial utiliza la última imagen de Docker de NGINX disponible en Docker Hub.
Copiando Archivos con el Comando docker cp
Para comenzar este tutorial, aprenderás a copiar archivos desde el host de Docker a los contenedores utilizando el comando docker cp
. El comando docker cp
copia archivos o carpetas entre un contenedor y el sistema de archivos local de tu host de Docker y viceversa.
Vamos a aprender cómo usar el comando Docker cp con un ejemplo.
1. Abre un terminal en tu máquina local.
2. Crea un archivo llamado myfile.txt usando el comando touch
. El archivo myfile.txt será copiado desde el host de Docker al contenedor.
3. Ejecuta el comando docker run
. El siguiente docker run creará un nuevo contenedor en segundo plano. El comando siguiente contiene tres parámetros descritos a continuación:
d
flag that runs the container in the background and keeps it alive until deleted.p
flag publishes a container’s port80
to the host on port80
.nginx
será la imagen que se utilizará para ejecutar el contenedor.

4. Verifica si el contenedor de Docker se ha creado correctamente utilizando el comando docker ps
. Después de ejecutar el comando docker ps
, deberías ver un nuevo valor generado bajo el atributo CONTAINER ID (En este caso ccae4670f030
) usando la imagen NGINX que confirma que el contenedor se ha creado correctamente.

Antes de ejecutar el comando Docker cp, la sintaxis del comando Docker cp es:
CONTAINER: SRC_PATH
especifica la ruta de origen del contenedor.DEST_PATH
es la ruta de destino en el host.CONTAINER: DEST_PATH
es la ruta de destino en el contenedor.
Además, también puedes agregar las opciones
con los siguientes parámetros en el comando de la siguiente manera:
- Usar archive o a: Copia todos los permisos de usuario y grupo principal de los archivos y carpetas.
- Usar L: Especificar la opción L permitirá que cualquier enlace simbólico en la Ruta de origen se copie en la ruta de destino.
5. A continuación, ejecuta el comando docker cp
. El comando docker cp
copiará el myfile.txt que creaste anteriormente al directorio /usr/share de los contenedores. ccae4670f030
es el ID del contenedor al que se copiará el myfile.txt.
6. Por último, conéctate por SSH al contenedor en ejecución ejecutando el comando docker exec
con /bin/bash
, que se utiliza como shell predeterminado para el inicio de sesión de usuario del sistema Linux.
- La bandera
i
indica que deseas abrir una sesión SSH interactiva en el contenedor. La banderai
no cierra la sesión SSH incluso si el contenedor no está adjunto. - La bandera
t
asigna un pseudo-TTY que debe usarse para ejecutar comandos de forma interactiva.sudo docker exec -it ccae4670f030 /bin/bash
Verás a continuación que ahora estás conectado al shell del contenedor cuando ejecutas docker exec
.

7. Después de iniciar sesión en el contenedor, verifica si myfile.txt ha sido copiado al contenedor usando el comando ls.
ls
es un comando para listar archivos de computadora en sistemas operativos Unix y similares a Unix.grep
buscará todos los archivos o carpetas que empiecen con la cadenamy
dentro del directorio usr/share.

Copiando archivos usando DockerFile
En la sección anterior, aprendiste cómo copiar los archivos en el contenedor ejecutando el comando Docker cp. ¿Qué pasa si necesitas copiar varios archivos de una vez? ¡Ciertamente, ejecutar múltiples comandos se convierte en una sobrecarga! Para resolver la ejecución de múltiples comandos cp, ¿por qué no intentar copiar archivos o carpetas en contenedores usando Dockerfile con comandos COPY
?
Desplegar un contenedor y copiar los archivos/carpetas usando Dockerfile te permite eliminar los pasos de copia manuales que hiciste en la sección anterior. Un Dockerfile es un documento de texto que contiene todos los comandos que un usuario podría llamar en la línea de comandos para ensamblar una imagen.
Creemos un Dockerfile, ejecutemos un contenedor desde él y finalmente copiemos los archivos.
1. Crea una carpeta llamada ~/host-to-container-copy-demo, luego cambia (cd
) el directorio de trabajo a esa carpeta. Esta carpeta contendrá todos los archivos que crearás en esta demostración.
2. Ahora, crea dos archivos de texto llamados myfile1.txt y myfile2.txt, cópialos y pégalos en los archivos, y guárdalos en el directorio ~/host-to-container-copy-demo.
3. Crea otro archivo, copia/pega la siguiente configuración y guarda el archivo como Dockerfile dentro del directorio ~/host-to-container-copy-demo. Cuando termines, Docker utilizará este DockerFile para ejecutar todos los comandos necesarios para construir una nueva imagen de Docker sobre cualquier imagen base.
El DockerFile a continuación contiene varios pasos/instrucciones que construirán el nuevo contenedor:
FROM
– La instrucción FROM inicializa una nueva etapa de construcción y establece la Imagen Base para instrucciones subsecuentes.COPY
– El comando COPY copia un archivo desde la máquina anfitriona de Docker (anfitrión de Docker) al contenedor.
4. Verifique todos los archivos requeridos para construir la nueva imagen ejecutando el comando tree
. Debería ver Dockerfile, myfile1.txt y myfile2.txt bajo el directorio ~/host-to-container-copy-demo.

5. A continuación, construya la imagen ejecutando el comando docker build
. La bandera t
se utiliza para etiquetar la imagen updated_ubuntu_image
con latest
y .
permite a Docker seleccionar todos los archivos necesarios desde el directorio de trabajo actual.

docker build
command 6. Ahora, verifique la nueva imagen construida updated_ubuntu_image
ejecutando el comando docker images
. Tenga en cuenta el atributo REPOSITORY. Este atributo es la etiqueta creada con la bandera -t
en el paso anterior.

7. Finalmente, ejecute el contenedor Docker usando la imagen recién construida ejecutando el comando docker run
. La bandera -it
instruye a Docker para asignar un pseudo-terminal conectado al stdin del contenedor. bash
proporciona el shell predeterminado para el inicio de sesión del usuario del sistema Linux.
Ahora verá que está en el shell Bash del contenedor Docker.

8. A continuación, verifique si los archivos fueron copiados correctamente en el contenedor en los directorios /tmp y /usr/share ejecutando el comando ls
.

Montar un Volumen de Almacenamiento y Acceder a Archivos con el Comando Docker Volume
Hasta ahora, has aprendido cómo copiar archivos del host al contenedor usando dos enfoques diferentes mediante el uso del comando docker cp
y un DockerFile. Esta vez, aprendamos cómo compartir fácilmente sistemas de archivos entre el host y los contenedores usando el comando docker volume
.
Suponiendo que todavía estás conectado al terminal:
1. Crea un volumen en el host de Docker ejecutando el comando docker volume create
. El siguiente comando creará un volumen llamado my-vol
. sudo docker volume create my-vol
2. Verifica que el volumen se haya creado correctamente ejecutando el comando docker volume ls
. El comando docker volume ls lista el volumen. Después de ejecutar el comando docker volume ls
, verás my-vol
en el atributo NOMBRE DEL VOLUMEN, lo que confirma que el volumen se creó correctamente.

3. A continuación, ejecuta el contenedor usando el comando docker run
.
- El contenedor llamado
volume_testing
utiliza la imagennginx:latest
. d
flag runs the container in the background and keeps it alive until deleted.v
flag mounts the volumemy-vol
created on Docker host to the container’s destination/app
directory.

4. Verifica si el volumen my-vol que creaste anteriormente está montado correctamente con el contenedor utilizando el comando docker inspect
. El comando docker inspect proporciona la información del contenedor. Después de ejecutar el comando docker inspect
, mostrará todos los detalles del contenedor especificado (volume_testing
), incluidos los detalles de montaje, como se muestra a continuación.
A continuación, la instantánea de la imagen confirma que el volumen (my-vol
) que creaste en el host está montado correctamente con el directorio /app
del contenedor.

Conclusión
En este tutorial, aprendiste diferentes formas de copiar archivos o carpetas desde el host de Docker a los contenedores, como usar el comando Docker cp, los comandos de volumen de Docker y Dockerfile.
Entonces, ¿qué enfoque vas a utilizar a continuación para copiar datos del host a los contenedores de Docker?