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?

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'

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

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.


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:
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.