J'essaie d'exécuter plusieurs commandes comme celle-ci.
docker run image cd /path/to/somewhere && python a.py
Mais cela me donne une erreur "Aucun fichier ou répertoire" car il est interprété comme ...
"docker run image cd /path/to/somewhere" && "python a.py"
Il semble que certains caractères ESCAPE comme "" ou () soient nécessaires.
J'ai donc aussi essayé
docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)
mais cela n'a pas fonctionné.
J'ai recherché Docker Run Reference mais je n'ai trouvé aucun indice sur les caractères ESCAPE.
docker
docker-image
ai0307
la source
la source
docker run alpine sh -c "ls | wc >> xxx"
cela m'aide beaucoup lorsque bash n'est pas disponible.cd
mais pas pour les choses où les codes de retour;
ne sont pas les mêmes que&&
voir unix.stackexchange.com/questions/37069/…Vous pouvez le faire de deux manières:
Utilisez l'option -w pour modifier le répertoire de travail:
https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w
Passez l'argument entier à / bin / bash:
la source
--workdir
dans le lien fourni. La page a probablement bougé / changé. Peut être mis à jour vers docs.docker.com/engine/reference/run/#workdir ou docs.docker.com/engine/reference/commandline/runVous pouvez également diriger des commandes à l'intérieur du conteneur Docker,
bash -c "<command1> | <command2>"
par exemple:Mais, sans invoquer le shell dans la télécommande, la sortie sera redirigée vers le terminal local.
la source
Si vous souhaitez stocker le résultat dans un fichier en dehors du conteneur, dans votre machine locale, vous pouvez faire quelque chose comme ça.
Le résultat de vos commandes sera disponible
/tmp/result.txt
dans votre machine locale.la source
Pour ceux qui sont venus ici et qui cherchent à faire de même avec
docker-compose
vous, il vous suffit d'ajouterbash -c
et de placer plusieurs commandes entre guillemets, jointes avec&&
.Donc, dans l'exemple OPs
docker-compose run image bash -c "cd /path/to/somewhere && python a.py"
la source
docker-compose down [service-name]
fonctionne pas ou? (et pas de soucis vous êtes les bienvenus, heureux de vous aider :))Juste pour faire une bonne réponse à partir du commentaire de @Eddy Hernandez et qui est très correct car Alpine est livré avec des cendres pas bash.
La question se réfère maintenant au démarrage d'un shell dans le conteneur Docker Alpine qui implique l'utilisation de
sh
ouash
ou/bin/sh
ou/bin/ash/
.Sur la base de la question du PO:
docker run image sh -c "cd /path/to/somewhere && python a.py"
la source
bash -c
fonctionne bien si les commandes que vous exécutez sont relativement simples. Cependant, si vous essayez d'exécuter une longue série de commandes pleines de caractères de contrôle, cela peut devenir complexe.J'ai réussi à contourner cela en canalisant mes commandes dans le processus de l'extérieur, c'est-à-dire
cat script.sh | docker run -i <image> /bin/bash
la source