Suponga que hay 40 pasos en un Dockerfile. Imagine una situación en la que cambia un archivo (por ejemplo, prod.json ) y vuelve a ejecutar el tercer paso en Dockerfile al ejecutar el comando de docker build . Dado que la docker build tarda más de un minuto en ejecutarse, ¿hay alguna forma de ver el contenido del archivo prod.json en la imagen de la ventana acoplable actual? Esto me permitirá decidir si reconstruir la imagen de la ventana acoplable o no.
Explicación alternativa de mi pregunta:
docker build para crear una imagen docker con service de etiquetas (llámelo v1)prod.json ) que requería el tercer paso en Dockerfile para volver a ejecutarse (fallando así el caché)docker build para crear una imagen de la ventana acoplable con el service de etiquetas (llámelo v2)Esto parece funcionar de manera confiable para mí, ya que resuelve el conflicto del punto de entrada y asegura la salida a la salida estándar. También mata el contenedor inmediatamente después de recopilar los datos para mantener las cosas limpias, casi tan bueno como no ejecutarlo en absoluto. Espero que ayude a otros.
docker run -it --rm -a stdout --entrypoint cat <image> <filename> También es fácil crear un alias si lo haces mucho. Agregue la primera línea a su ~/.bash_aliases o ~/.bashrc .
$ alias dcat='docker run -it --rm -a stdout --entrypoint cat' $ dcat <image> <filename>Cuando haga docker build , docker iniciará un contenedor intermedio y ejecutará su comando dentro, luego el contenedor se eliminará una vez que finalice el proceso. Entonces, si desea verificar el contenido de algún archivo mientras la imagen aún está en construcción, simplemente docker exec -it <intermediate_container_id> /bin/bash y compruébelo.
He aquí un ejemplo detallado:
Dockerfile con proceso de compilación largo simulado :
FROM alpine:3.3 RUN echo '["name": "docker"]' > /root/prod.json RUN echo "prod.json modified, start long build process" && sleep 120 && echo "Long build process finished"Construye la imagen
~/test/long-build-dockerfile/ [test1*] docker build -t long-running-build . Sending build context to Docker daemon 2.048 kB Step 1/3 : FROM alpine:3.3 ---> 6c2aa2137d97 Step 2/3 : RUN echo '["name": "docker"]' > /root/prod.json ---> Running in 4045ab129add ---> f5d21892fa51 Removing intermediate container 4045ab129add Step 3/3 : RUN echo "prod.json modified, start long build process" && sleep 120 && echo "Long build process finished" ---> Running in dd45b269efda prod.json modified, start long build processAhora el proceso de compilación se detendrá durante 120 segundos aquí, luego abra otra terminal y busque el contenedor intermedio:
~/ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd45b269efda f5d21892fa51 "/bin/sh -c 'echo ..." 11 hours ago Up 4 seconds serene_gatesEntra y comprueba el contenido:
~/ docker exec -it serene_gates sh / # cd /root/ ~ # ls prod.json ~ # cat prod.json ["name": "docker"]