web-dev-qa-db-fra.com

Pourquoi ne puis-je pas cd dans un répertoire avec docker run?

J'ai besoin d'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 d'accès complet, mais il se bloque car il s'attend à être lancé à partir du répertoire actuel. Que puis-je faire?

41
schmmd

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'
38
Glueon

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

docker run

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

Donc, dans votre cas, vous exécuteriez:

Sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014
90
Vojtech Vitek

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

5
Randall Smith

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

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

$ export PATH=$PATH:
0
user246794