69 votes

Pourquoi je ne peux pas accéder à un répertoire avec docker run ?

Je dois exécuter une application à partir d'un répertoire spécifique.

$ sudo docker run -P ubuntu/decomposer 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
2014/10/09 21:30:03 exec: "cd /local/deploy/decomposer; ./decomposer-4-15-2014": stat cd /local/deploy/decomposer; ./decomposer-4-15-2014: no such file or directory

Ce répertoire existe bel et bien, et si je me connecte à docker en exécutant bash de manière interactive, je peux exécuter la commande ci-dessus.

$ sudo docker run -i -t ubuntu/decomposer /bin/bash
# cd /local/deploy/decomposer; ./decomposer-4-15-2014

Je peux exécuter mon programme en spécifiant le chemin d'accès complet, mais il se bloque alors car il s'attend à être lancé à partir du répertoire actuel. Que puis-je faire ?

144voto

jasonevers Points 36

Vous pouvez utiliser -w pour changer votre répertoire de travail.

docker run

  -w, --workdir=""           Working directory inside the container

Donc, dans ton cas, tu t'enfuirais :

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014

59voto

Glueon Points 3474

Passez votre commande comme argument à /bin/sh comme ceci :

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'

7voto

Randall Smith Points 1336

Utilisez WORKDIR dans votre Dockerfile pour définir le répertoire de travail. Vous pouvez ensuite exécuter votre commande avec EXEC.

0voto

Cela pourrait me être dû au problème de permission ou l'instance n'est pas en mesure de trouver le chemin disponible de l'exécutable. Pour vérifier cela, essayez d'ajouter l'emplacement disponible de l'exécutable dans le chemin et essayez d'exécuter le script.

pour ajouter le répertoire courant dans le chemin d'accès, utilisez la commande suivante

$ export PATH=$PATH:

-1voto

M-frankied Points 251

J'ai un exemple similaire sur ce site web https://djangostars.com/blog/what-is-docker-and-how-to-use-it-with-Python/#header13 :

docker run -d --name "test-nginx" -p 8080:80 -v $(pwd):/usr/share/nginx/html:ro nginx:latest

Cette commande ne fonctionne pas sous Git Bash et Windows.

La solution consistait à utiliser cd au lieu de $(pwd) :

docker run -d --name "test-nginx" -p 8080:80 -v cd:/usr/share/nginx/html:ro nginx:latest

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X