¿Cómo sacar un artefacto de la construcción de Docker? [duplicar]

Nov 08 2020

¿Hay alguna forma de obtener artefactos desde docker buildla máquina host?

Como ejemplo, dado lo siguiente Dockerfile, ¿hay alguna forma de obtener el archivo log.log?

FROM alpine:3.7 as base
RUN mkdir /log/
RUN touch /log/log.log

Mi intento de usar COPYparece funcionar solo copiando desde el host a la imagen de la ventana acoplable:

FROM alpine:3.7 as base
RUN mkdir /log/
RUN touch /log/log.log
COPY ./foo.bar /log/
RUN ls -l /log/
COPY /log/log.log ./
$ touch ./foo.bar && docker build -t demo --no-cache .
Sending build context to Docker daemon  15.36kB
Step 1/6 : FROM alpine:3.7 as base
 ---> 6d1ef012b567
Step 2/6 : RUN mkdir /log/
 ---> Running in 4b6df3797ee3
Removing intermediate container 4b6df3797ee3
 ---> 827e6001d34a
Step 3/6 : RUN touch /log/log.log
 ---> Running in d93d50d61b69
Removing intermediate container d93d50d61b69
 ---> c44620d4f9c4
Step 4/6 : COPY ./foo.bar /log/
 ---> 6996718d44da
Step 5/6 : RUN ls -l /log/
 ---> Running in 84e997af182b
total 0
-rw-r--r--    1 root     root             0 Nov  8 21:44 foo.bar
-rw-r--r--    1 root     root             0 Nov  8 21:44 log.log
Removing intermediate container 84e997af182b
 ---> 5a440f258772
Step 6/6 : COPY /log/log.log ./
COPY failed: stat /var/lib/docker/tmp/docker-builder677155266/log/log.log: no such file or directory

Soy consciente del -vargumento (montaje de volumen) para docker run, pero eso no es lo que estoy buscando: estoy buscando saber si hay una manera de obtener artefactos del docker buildproceso específicamente.


Actualización: RE: sugerencia de uso de @ ChristianFosli docker cp: esa solución requiere un contenedor acoplable . Sin embargo, en mi caso, la razón por la que busco extraer archivos específicamente durante el docker buildproceso es que Dockerfileejecuta un ejecutable que falla, por lo tanto, no tengo una imagen que pueda ejecutar como un contenedor en el que pueda realizar el docker cp. Es decir, el archivo que me gustaría extraer del docker buildproceso es un archivo de metadatos que contiene información de depuración sobre la falla, que me gustaría inspeccionar.

Respuestas

1 ChristianFosli Nov 08 2020 at 21:59

Puede copiar archivos de un contenedor a su sistema de archivos local usando docker cp.

Consulte los documentos para obtener más detalles

No conozco una forma de copiar archivos directamente desde una imagen de la ventana acoplable, pero puede crear un contenedor basado en su imagen, sin ejecutarlo, con la ventana acoplable crear y luego copiar los archivos con docker cp.