La description
J'utilise Docker version 1.12.5 sur Windows 10 via Hyper-V et je souhaite utiliser des exécutables de conteneur comme commandes dans le chemin actuel. J'ai créé une image Docker qui fonctionne correctement, mais j'ai un problème pour monter le chemin actuel. L'idée est de créer un alias et d'exécuter une docker run --rm [...]
commande afin qu'il puisse être utilisé à l'échelle du système dans le répertoire courant.
Installer
J'ai un lecteur E avec un dossier «test» et là-dedans un dossier appelé «dossier sur l'hôte Windows» pour montrer que la commande fonctionne. Le Dockerfile crée le répertoire /data
, le définit comme VOLUME et WORKDIR.
Ayant E:\test
comme répertoire actuel dans PowerShell et exécutant la commande Docker avec un chemin absolu, je peux voir le contenu de E:\test
:
PS E:\test> docker run --rm -it -v E:\test:/data mirkohaaser/docker-clitools ls -la
total 0
drwxr-xr-x 2 root root 0 Jan 4 11:45 .
drwxr-xr-x 2 root root 0 Jan 5 12:17 folder on windows host
Problème
Je veux utiliser le répertoire courant et non une notation absolue. Je n'ai pas pu utiliser pwd dans le volume à cause de différents messages d'erreur:
Essayer avec ($ pwd)
PS E:\test> docker run --rm -it -v ($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: ":/data" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Essayer avec / ($ pwd)
PS E:\test> docker run --rm -it -v /($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: "E:\\test" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Essayer avec \ ´pwd \ ´
PS E:\test> docker run --rm -it -v ´$pwd´:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Invalid bind mount spec "´E:\\test´:/data": invalid mode: /data.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Essayer avec `pwd`
PS E:\test> docker run --rm -it -v `$pwd`:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: create $pwd: "$pwd" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Quelle est la syntaxe correcte pour monter le répertoire actuel en tant que volume dans Docker sous Windows 10?
${PWD}
fonctionne également sur les systèmes Unix (Linux, macOS). Remarque :pwd
= répertoire de travail actuel$(pwd)
qui fonctionnerait également sous Linux (je pense - non testé)winpty docker run -it -v "/$(pwd -W):/usr/src/project" gcc:4.9
ouwinpty docker run -it -v "/$(cmd //c cd):/usr/src/project" gcc:4.9
.Cela fonctionne pour moi dans PowerShell:
la source
PS C:\Users\X\Projects\docker_django> docker run --rm -v ${PWD}:/data alpine ls /data C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: invalid mode: /data. See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.
Docker for Windows
place deToolbox
.Pour Git Bash pour Windows (dans ConEmu), ce qui suit fonctionne pour moi (pour les conteneurs Docker Windows):
Notez les backticks / backquotes autour
pwd -W
!Avec toutes les autres variantes de PWD que j'ai essayées, j'ai reçu:
"Error response from daemon: invalid volume specification: ..."
Mise à jour: ce qui précède était pour les conteneurs Docker Windows, pour les conteneurs Linux utiliser:
la source
pwd -W
: / usr / share / data atomgraph / fuseki --file = / usr / share / data / Mokyklu_sarasas.ttl / mokyklos Fichier non trouvé: C: / tools / cmder / vendor /git-for-windows/usr/share/data/Mokyklu_sarasas.ttl`command`
Cliquez sur Appliquer . Vous pouvez être invité à fournir les informations d'identification de l'utilisateur.
La commande ci-dessous devrait maintenant fonctionner sur PowerShell (l'invite de commande ne prend pas en charge
${PWD}
):docker run --rm -v ${PWD}:/data alpine ls /data
IMPORTANT : si / lorsque vous modifiez le mot de passe de votre domaine Windows, le montage cessera de fonctionner en silence , c'est-à-dire
-v
fonctionnera mais le conteneur ne verra pas vos dossiers et fichiers hôtes. Solution : revenez à Paramètres, décochez les Drive partagés, Appliquer , vérifiez-les à nouveau, Appliquer et entrez le nouveau mot de passe lorsque vous y êtes invité.la source
Voici le mien qui est compatible avec Win10 docker-ce et Win7 docker-toolbox. Au moment où j'écris ceci :).
Vous pouvez remarquer que je préfère utiliser / host_mnt / c au lieu de c: / car j'ai parfois rencontré des problèmes sur docker-ce Win 10 avec c: /
la source
${MOUNT_PATH}
résout comme/c/Program Files/Docker Toolbox
D'autres solutions pour Git Bash fournies par d'autres n'ont pas fonctionné pour moi. Apparemment, il existe actuellement un bogue / limitation dans Git pour Windows. Voyez ceci et cela .
J'ai finalement réussi à le faire fonctionner après avoir trouvé ce fil GitHub (qui fournit des solutions supplémentaires si vous êtes intéressé, ce qui pourrait fonctionner pour vous, mais pas pour moi).
J'ai fini par utiliser la syntaxe suivante:
Notez le
MSYS_NO_PATHCONV=1
devant de ladocker
commande et$(pwd)
- crochets, pwd minuscules, pas de guillemets, pas de barres obliques inverses.De plus, j'utilise des conteneurs Linux sur Windows si cela compte.
J'ai testé cela dans le nouveau terminal Windows, ConEmu et GitBash, et tous ont fonctionné pour moi.
la source
MSYS_NO_PATHCONV=1
option de commande? Sinon, mon répertoire de montage de destination a été rempli avec "c: / tools / cmder / vendor / git-for-windows"Cette commande devrait le corriger.
docker exécuter --rm -it -v
${PWD}:c:\data
mirkohaaser / docker-clitools{PWD} est le dossier actuel de l'hôte. après le se
:
trouve le dossier du conteneur. Si le montage est correct, les fichiers seront répertoriés dans le directeurc:\data
dans le conteneur.la source
Vous devez remplacer toutes les barres obliques inverses par des barres obliques, alors changez
docker -v C: \ mon \ dossier: / mountlocation ...
à
docker -v C: / mon / dossier: / mountlocation ...
J'appelle normalement docker à partir d'un script cmd où je veux que le dossier à monter soit relatif au script que j'appelle donc dans ce script je fais ceci ...
la source
Invite de commande (
Cmd.exe
)Lorsque l'interface de ligne de commande Docker est utilisée à partir de Windows
Cmd.exe
, utilisez%cd%
pour monter le répertoire actuel:Git Bash (MinGW)
Lorsque la CLI Docker est utilisée à partir de Git Bash (MinGW), le montage du répertoire actuel peut échouer en raison d'une conversion de chemin POSIX: le volume monté sur Docker ajoute; C à la fin du chemin Windows lors de la traduction à partir du chemin de style Linux .
Échappez aux chemins POSIX en préfixant avec
/
Pour ignorer la conversion de chemin, les chemins POSIX doivent être précédés de la barre oblique (
/
) pour avoir une double barre oblique (//
), y compris/$(pwd)
Désactiver la conversion de chemin
Désactivez la conversion de chemin POSIX dans Git Bash (MinGW) en définissant
MSYS_NO_PATHCONV=1
la variable d'environnement au niveau de la commandeou niveau shell (système)
la source
Git bash
echo ${PWD}
résultat:cmd ou PowerShell
echo ${PWD}
résultat:comme nous le voyons dans cmd ou PowerShell $ {PWD} ne fonctionnera pas
la source