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}"
$ docker run -p 8080:3000 -v /$(pwd):/var/www -w //var/www node npm start
J'ai finalement trouvé que je devais utiliser la barre oblique principale avec parenthèses au lieu d'accolades. De plus, avec le répertoire de travail, j'avais besoin de deux barres obliques principales. Pour info: c'est la commande dont j'avais besoin pour Docker for Web Developers sur Pluralsightdocker run --rm -v /${PWD}/migrations:/flyway/sql --network xxx_default flyway
. Merci.Pour moi, la solution était simplement d'inclure une barre oblique de fermeture
/
à la fin de tous les chemins .Par exemple au lieu de
/opt/apache-atlas-2.0.0/bin/atlas_start.py
...utilisation
/opt/apache-atlas-2.0.0/bin/atlas_start.py/
la source
Le montage du répertoire actuel dans un conteneur Docker dans Windows 10 à partir de Git Bash (MinGW) peut échouer en raison d'une conversion de chemin POSIX. Tout chemin commençant par
/
est converti en un chemin Windows valide.Échappez aux chemins POSIX en préfixant avec
/
Pour ignorer la conversion de chemin, tous les chemins POSIX doivent être précédés de la barre oblique supplémentaire (
/
), y compris/$(pwd)
.Dans Git Bash, le chemin
//data/test.txt
n'est pas converti et dans les shells Linux//
(double barre oblique principale) est ignoré et traité de la même manière que/
.Désactiver la conversion de chemin
Désactivez la conversion de chemin POSIX dans Git Bash (MinGW) à l'aide de
MSYS_NO_PATHCONV
la variable d'environnement.La conversion de chemin peut être désactivée au niveau de la commande:
La conversion de chemin peut être désactivée au niveau du shell (ou du système):
la source
Pouvez-vous essayer la commande ci-dessous -
la source
J'ai en fait eu le même problème. Selon que vous utilisez Git Bash, cette commande fonctionne (en utilisant nginx comme exemple):
conteneur docker run --name nom-conteneur -v `pwd -W` / html: / usr / share / nginx / html -p 8000: 80 -d nginx
bien sûr, vous pouvez spécifier le port et le répertoire comme vous le souhaitez.
la source
J'ai eu le même problème sur git bash et non sur l'invite de commande. Vous pouvez à la place
la source
Directement travaillé pour moi ci-dessous. n'utilisez simplement pas de variable dynamique.
la source