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.