J'ai trouvé une bizarrerie intéressante en essayant de monter une image docker sur Windows.
J'ai créé un .sh
script qui fait un montage du dossier du projet pour exécuter notre image d'environnement de développeur. Je veux un script que tous les développeurs peuvent exécuter, quelle que soit leur machine. Tout ce qu'il fait, c'est exécuter le menu fixe avec le dossier de projet actuel.
#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev
Fonctionne bien. Maintenant, le plan est d'appeler ce script à partir npm
, donc j'aimerais que cela fonctionne par rapport au dossier actuel. Essayons une autre version.
docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev
Échoue avec:
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. De quoi ;C
et d'où vient-il?
Alors je fais echo $PWD
ce qui me donne /d/my/project/folder
.
Intéressant, donc $PWD
résout le chemin correct au format de chemin Linux, et il semble que docker essaie de traduire de cela vers le chemin Windows correct, sauf qu'il y a cela ;C
qui apparaît de nulle part. Et le \
sont /
...
Que se passe-t-il exactement ici?
J'obtiens le même résultat dans les terminaux git bash et powershell de VSCode.
Mise à jour: j'ai remarqué que l'exécution du .sh
terminal PowerShell de VSCode ouvre une cmd.exe
fenêtre de console séparée qui semble exécuter le script dans git bash. Donc, cela pourrait être un problème git bash.
"/${PWD}"