Encontré algunas rarezas interesantes al intentar montar una imagen de Docker en Windows.
Creé un .sh
script que monta la carpeta del proyecto para ejecutar nuestra imagen de entorno de desarrollador. Quiero un script que todos los desarrolladores puedan ejecutar, independientemente de su máquina. Todo lo que hace es ejecutar la ventana acoplable con la carpeta del proyecto actual.
#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev
Funciona bien. Ahora el plan es llamar a este script desde npm
, así que me gustaría que esto funcione en relación con la carpeta actual. Probemos otra versión.
docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev
Falla con:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from
daemon: Mount denied:
The source path "D:/my/project/folder;C"
doesn't exist and is not known to Docker.
Wat. ¿Qué es ;C
y de dónde vino?
Entonces hago lo echo $PWD
que me da /d/my/project/folder
.
Interesante, así que se $PWD
resuelve en la ruta correcta en formato de ruta de Linux, y parece que Docker está tratando de traducir de eso a la ruta de Windows correcta, excepto que hay esto ;C
que aparece de la nada. Y \
son /
...
Qué está pasando aquí?
Obtengo el mismo resultado en el terminal git bash y powershell de VSCode.
Actualización: noté que al ejecutar el .sh
terminal de PowerShell de VSCode, se abre una cmd.exe
ventana de consola separada que parece ejecutar el script en git bash. Entonces esto podría ser un problema de git bash.
"/${PWD}"
$ docker run -p 8080:3000 -v /$(pwd):/var/www -w //var/www node npm start
Finalmente descubrí que tenía que usar la barra inclinada con paréntesis en lugar de llaves. Además, con el directorio de trabajo necesitaba dos barras inclinadas. FYI: este es el comando que necesitaba para Docker para desarrolladores web en Pluralsightdocker run --rm -v /${PWD}/migrations:/flyway/sql --network xxx_default flyway
. Gracias.Para mí, la solución fue simplemente incluir una barra de cierre
/
al final de cualquier ruta .Por ejemplo, en lugar de
/opt/apache-atlas-2.0.0/bin/atlas_start.py
...utilizar
/opt/apache-atlas-2.0.0/bin/atlas_start.py/
fuente
El montaje del directorio actual en un contenedor Docker en Windows 10 desde Git Bash (MinGW) puede fallar debido a una conversión de ruta POSIX. Cualquier ruta que comience con
/
se convierte en una ruta válida de Windows.Escape de las rutas POSIX prefijando con
/
Para omitir la conversión de la ruta, todas las rutas POSIX deben tener como prefijo la barra inclinada adicional (
/
), incluido/$(pwd)
.En Git Bash, la ruta
//data/test.txt
no se convierte y en los shells de Linux//
(la barra inclinada inicial) se ignora y se trata de la misma manera que/
.Deshabilitar la conversión de ruta
Deshabilite la conversión de ruta POSIX en Git Bash (MinGW) usando
MSYS_NO_PATHCONV
la variable de entorno.La conversión de ruta se puede desactivar en el nivel de comando:
La conversión de ruta se puede desactivar en el nivel de shell (o sistema):
fuente
¿Puedes probar el siguiente comando?
fuente
De hecho, tuve el mismo problema. Dependiendo de si está usando Git Bash, este comando funciona (usando nginx como ejemplo):
Docker container run --name container-name -v `pwd -W` / html: / usr / share / nginx / html -p 8000: 80 -d nginx
por supuesto, puede especificar el puerto y el directorio que desee.
fuente
Tuve el mismo problema en git bash y no en el símbolo del sistema. En su lugar puedes
fuente
Directamente funcionó para mí a continuación. simplemente no use la variable dinámica.
fuente