es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice un disco duro (virtual) en la imagen de Docker de Windows.

Estoy tratando de crear una imagen base de Docker para una aplicación de Windows. Sé que las imágenes de Windows tienen sus desventajas y problemas, pero la aplicación no se ejecutará en un entorno de Linux.
Es necesario tener algunos datos en la unidad G: y ahí es donde parece que no puedo hacer que funcione. No necesito asignar el volumen G: a mi disco duro, solo necesito instalar algunas cosas ahí. Aquí está mi Dockerfile:

FROM mcr.microsoft.com/windows/servercore:20H2

Volume “G:”

RUN powershell wget http://some.url/file.zip -OutFile G:\file.zip
RUN tar -xf G:\file.zip -C G:

Pero la compilación de Docker falla en la última línea porque el archivo no aparece en la unidad G:. Intenté descargar el archivo en la unidad C: y luego extraerlo en la unidad G:, y también intenté extraerlo en la unidad C: y luego copiarlo en la unidad G:, pero ninguno funcionó. La unidad G: siempre está vacía.
Cuando ejecuto el comando dentro del contenedor y ejecuto los comandos desde Dockerfile, funciona como se esperaba. Solo cuando ejecuto la compilación de Docker, la unidad G: se ignora por completo.
¿Qué podría estar haciendo mal?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás teniendo problemas para obtener los datos en la unidad G: de tu Dockerfile. Es posible que la unidad G: no se esté montando correctamente cuando ejecutas el comando docker build. Podrías intentar montar explícitamente la unidad G: en tu Dockerfile, así:

    FROM mcr.microsoft.com/windows/servercore:20H2
    
    VOLUME G:
    
    RUN powershell wget http://some.url/file.zip -OutFile G:\file.zip
    RUN tar -xf G:\file.zip -C G:
    

    Si eso no funciona, podrías intentar ejecutar el comando docker build con la bandera --mount, así:

    docker build --mount type=volume,source=G:,target=G: .

    Esto debería montar correctamente la unidad G: y permitirte acceder a ella en tu Dockerfile.

Comments are closed.