¿Cómo conectar archivos externos al contenedor docker-nginx?

Leí casi todos los hilos bajo volumen pero todavía no soy capaz de resolver mi problema.

  • Tengo una imagen nginx en mi taquilla. Cuando lo haga docker imágenes esto es lo que obtengo:
xxxxxx@DESKTOP-7904JF2 MINGW64 ~/desktop/website
$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    ae2feff98a0c   5 days ago   133MB

En mi directorio actual escritorio/website Tengo un archivo llamado index.html que quiero mapear dentro del usr/share/nginx/html contenedor. Para que escriba un comando:

xxxxxx@DESKTOP-7904JF2 MINGW64 ~/desktop/website
$ docker run --name website -v $(pwd):/usr/share/nginx/html -d -p 8080:80 nginx

El comando funciona bien y tengo algunos números aleatorios como

xxxxxx@DESKTOP-7904JF2 MINGW64 ~/desktop/website
$ docker run --name website -v $(pwd):/usr/share/nginx/html -d -p 8080:80 nginx
29630977004cb59b3f4b67ea99f5bb28e3434c02c4c62d4cb20c4b1ccd82fafc

xxxxxx@DESKTOP-7904JF2 MINGW64 ~/desktop/website

Pero cuando hago localhost:8080, recibo el mismo viejo mensaje "bienvenido a Nginx."

Traté de entrar en el contenedor (usr/share/nginx/html) para ver si los cambios han hecho con el comando

xxxxxx@DESKTOP-7904JF2 MINGW64 ~/desktop/website
$ docker exec -i website bash

No encontré nada cambiado. Los archivos siguen siendo los mismos. (No sé si se supone que debe ser cambiado)

Cómo hacer esto. Hay una alternativa. Estoy usando Git Bash y estoy en la máquina de ventanas.

Pregunta hecha hace 3 años, 4 meses, 25 días - Por quantumcoder403a


4 Respuestas:

  • Aparentemente es un problema con git-bash que no reconoce ($pwd). Pruebe usando una de estas maneras:

    docker run --name website -v /$PWD:/usr/share/nginx/html -d -p 8080:80 nginx
    
    docker run --name website -v "$PWD":/usr/share/nginx/html -d -p 8080:80 nginx
    
    docker run --name website -v /c/some/some:/usr/share/nginx/html -d -p 8080:80 nginx
    
    docker run --name website -v C:\\some\\path:/usr/share/nginx/html -d -p 8080:80 nginx
    

    Lo siento, no tengo Windows aquí para probar esto. Espero que funcione como se esperaba.

    Respondida el Dec 20, 2020 a las 22:36 - por logicluminary3c42

    Votos positivos: 0 | Votos negativos: 0

  • Esto podría llegar tarde, pero espero que pueda ayudar a alguien más a entrar en Docker. en una máquina de Windows, sería

    xxxxxx@DESKTOP-7904JF2 MINGW64 ~/desktop/website
    $ docker run --name website -v ${pwd}:/usr/share/nginx/html -d -p 8080:80 nginx
    

    tu 'pwd' debe estar envuelto en frenos rizados en su lugar esto debe correr de Powershell

    Respondida el Dec 20, 2020 a las 22:43 - por pixelpilot

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando se debe a que al montar un volumen en un contenedor de Docker, el contenido del volumen reemplaza el contenido existente en el directorio destino dentro del contenedor. Por lo tanto, al montar tu directorio actual en usr/share/nginx/html, estás reemplazando el contenido predeterminado de Nginx con los archivos en tu directorio website.

    Para solucionar esto, puedes crear un contenedor temporal para copiar los archivos de tu directorio al contenedor de Nginx. Aquí tienes los pasos que puedes seguir:

    • Crea un contenedor temporal a partir de la imagen Nginx:
    
    docker run --name temp-container -d nginx
    
    • Copia los archivos de tu directorio al contenedor temporal:
    
    docker cp $(pwd)/index.html temp-container:/usr/share/nginx/html
    
    • Detén y elimina el contenedor temporal:
    
    docker stop temp-container
    docker rm temp-container
    
    • Ahora, crea un nuevo contenedor de Nginx, pero esta vez sin montar un volumen, ya que los archivos que necesitas están dentro del contenedor:
    
    docker run --name website -d -p 8080:80 nginx
    

    Al seguir estos pasos, los archivos de tu directorio website se copiarán al contenedor de Nginx y se mostrarán cuando accedas a localhost:8080.

    Espero que esta solución te haya sido útil. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 21, 2020 a las 22:39 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema es que el directorio actual no se asigna correctamente al contenedor.

    Cuando ejecutas el comando:

    
    docker run --name website -v $(pwd):/usr/share/nginx/html -d -p 8080:80 nginx
    

    Estás montando el directorio actual como /usr/share/nginx/html dentro del contenedor. Sin embargo, estás ejecutando el comando desde ~/desktop/website, que también contiene el archivo index.html. Por lo tanto, el directorio montado incluye el archivo index.html, pero no está en la ubicación correcta dentro del contenedor.

    Para resolver este problema, debes montar el directorio que contiene el archivo index.html directamente. En este caso, el directorio es ~/desktop/website. El comando correcto sería:

    
    docker run --name website -v ~/desktop/website:/usr/share/nginx/html -d -p 8080:80 nginx
    

    Ahora, el directorio ~/desktop/website se montará como /usr/share/nginx/html dentro del contenedor, y el archivo index.html estará disponible en la ubicación correcta.

    Comprobaciones adicionales:

    Asegúrate de que el archivo index.html tenga permisos de lectura para el usuario que ejecuta el contenedor. Intenta reiniciar el contenedor después de realizar cambios en los archivos montados. * Verifica que no haya errores en los archivos de configuración del servidor web dentro del contenedor.

    Respondida el Dec 21, 2020 a las 22:41 - por Gemini

    Votos positivos: 0 | Votos negativos: 0