Docker exec - Ecrire du texte dans un fichier dans un conteneur
Je veux écrire une ligne de texte vers un fichier texte à l'INTÉRIEUR de l'exécution d'un conteneur docker. Voici ce que j'ai essayé jusqu'à présent:
docker exec -d app_$i eval echo "server.url=$server_url" >> /home/app/.app/app.config
Réponse:
/home/user/.app/app.config: No such file or directory
Deuxième essai:
cfg_add="echo 'server.url=$server_url' >> /home/user/.app/app.config"
docker exec -i app_$i eval $cfg_add
Réponse:
exec: "eval": executable file not found in $PATH
Des idées?
source d'informationauteur jwi
Vous devez vous connecter pour publier un commentaire.
eval
est une coquille builtinalors quedocker exec
implique un utilitaire externe d'être appelé, afin de l'utilisereval
est pas une option.Au lieu de cela, invoquer un shell exécutable dans le conteneur (
bash
) explicitementet de passer la commande à exécuter en tant que chaînepar l'intermédiaire de son-c
option:À l'aide d'un double-cité chaîne à transmettre à
bash -c
vous vous assurez que la actuel shell effectue chaîne d'interpolation en premier, tandis que le conteneurbash
exemple, voit le résultat développé comme un littéraledans le cadre de l'embedded unique cité chaîne.Comme pour vos symptômes:
/home/user/.app/app.config: No such file or directory
a été signalé, étant donné que la redirection que vous avez voulu arriver dans le conteneur s'est réellement passé dans de votre hôte shell - et parce que dir./home/user/.app
apparemment n'existe pas dans votre système de fichier hôte, la commande a échoué fondamentalementavant de votre hôte shell a même essayé d'exécuter la commande (bash
abandonner l'exécution de la commande si une redirection de la sortie ne peut être exécuté).eval
son utilisation n'a pas de surface comme un problème jusqu'à ce que votre deuxième commande, ce qui en fait ne exécutée.exec: "eval": executable file not found in $PATH
qui s'est passé, parce que, comme indiqué,eval
n'est pas un utilitaire externemais un shell builtinetdocker exec
ne peut exécuter des utilitaires externes.En outre:
Si vous avez besoin d'écrire du texte à partir de l'extérieur du récipient, cela fonctionne aussi:
Ce sera canalisation d'entrée dans le récipient. Bien sûr, ce serait également travailler pour le texte brut (pas de fichier). Il est important de laisser de côté l'
-t
paramètre.Voir https://github.com/docker/docker/pull/9537
Mise à JOUR (dans le cas où vous avez juste besoin de copier des fichiers, pas des parties de fichiers):
Docker v17.03 a
docker cp
dont des copies entre les fs et les conteneurs: https://docs.docker.com/engine/reference/commandline/cp/#usage