Pourquoi ne puis-je pas accéder à un répertoire dans lequel docker est exécuté?

39

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 définitivement, 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 complet, mais il se bloque alors qu'il s'attend à être lancé à partir du répertoire actuel. Que puis-je faire?

schmmd
la source

Réponses:

34

Transmettez votre commande en argument à / bin / sh comme ceci:

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
Glueon
la source
docker exécuter centos / bin / sh-c 'cd / bin; / bin / ls 'n'imprime rien, alors que docker exécute centos / bin / sh -c' / bin / ls / bin 'fonctionne.
seanmcl
En réalité, les deux commandes affichent la liste des fichiers dans le répertoire / bin. J'ai essayé les deux.
Glueon
Pas sur ma boîte, centos7.
seanmcl
1
En fait, même le simple fait de supprimer les guillemets autour de ma commande a bien fonctionné. Je pense que docker l'enveloppe de /bin/sh -ctoute façon.
Schmmd
85

Vous pouvez utiliser l' -woption pour changer votre répertoire de travail.

docker run

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

Donc, dans votre cas, vous courriez:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014
Vojtech Vitek
la source
Puis-je utiliser -wavec docker exec? Je cherche un moyen d'exécuter un script python dans mon conteneur, mais je ne peux pas l'arrêter en dehors du conteneur.
Zx1986
oh, j'ai la réponse ....flag provided but not defined: -w
Zx1986
1
Bon sang, pourquoi cela s’est-il caché tout en bas de la page de référence de l'exécution du docker ! :-)
Amir Abiri
5
Cela devrait être la réponse acceptée
fferri
4

Utilisez WORKDIR dans votre fichier Docker pour définir le répertoire de travail. Ensuite, vous pouvez exécuter votre commande avec EXEC.

Randall Smith
la source
0

Cela peut être dû au problème d'autorisation ou l'instance ne peut pas trouver le chemin d'accès disponible à l'exécutable. Pour vérifier cela, essayez d'ajouter l'emplacement disponible de l'exécutable dans chemin et essayez d'exécuter le script.

pour ajouter le répertoire en cours dans le chemin, veuillez utiliser la commande ci-dessous

$ export PATH=$PATH:

la source