GNU/Linux >> Tutoriels Linux >  >> Linux

Rediriger la sortie de la commande dans docker

Juste un complément, lors de l'utilisation de docker-compose , vous pouvez également essayer :

command: bash -c "script_or_command > /path/to/log/command.log 2>&1"


Lorsque vous spécifiez une liste JSON en tant que CMD dans un Dockerfile , il ne sera pas exécuté dans un shell, donc les fonctions habituelles du shell, comme la redirection stdout et stderr, ne fonctionneront pas.

À partir de la documentation :

Le formulaire exec est analysé comme un tableau JSON, ce qui signifie que vous devez utiliser des guillemets doubles (" ) autour des mots et non des guillemets simples (' ).

Contrairement au formulaire shell, le formulaire exec n'invoque pas de shell de commande. Cela signifie que le traitement normal du shell ne se produit pas. Par exemple, CMD [ "echo", "$HOME" ] ne fera pas de substitution de variable sur $HOME . Si vous souhaitez un traitement shell, utilisez le formulaire shell ou exécutez un shell directement, par exemple :CMD [ "sh", "-c", "echo", "$HOME" ] .

Ce que fait réellement votre commande, c'est exécuter votre index.py script et en passant les chaînes "1>server.log" et "2>server.log" comme arguments de ligne de commande dans ce script python .

Utilisez plutôt l'une des options suivantes (les deux devraient fonctionner) :

  1. CMD "python index.py > server.log 2>&1"
  2. CMD ["/bin/sh", "-c", "python index.py > server.log 2>&1"]

Pour utiliser docker run dans un pipeline shell ou sous redirection shell, faisant run accepter stdin et sortir vers stdout et stderr de manière appropriée, utilisez cette incantation :

docker run -i --log-driver=none -a stdin -a stdout -a stderr ...

par exemple. pour exécuter le alpine image et exécutez la commande UNIX cat dans l'environnement confiné :

echo "This was piped into docker" |
  docker run -i --log-driver=none -a stdin -a stdout -a stderr \
    alpine cat - |
  xargs echo This is coming out of docker: 

émet :

This is coming out of docker: This was piped into docker

Linux
  1. Comment affecter la sortie d'une commande à une variable Shell ?

  2. Stockage de la sortie de la commande dans la variable Shell ?

  3. Quelle est la différence entre obtenir la sortie de la commande en utilisant `command` et $ (commande) dans Shell ??

  4. Comment savoir si la sortie d'une commande ou d'un script shell est Stdout ou Stderr ?

  5. Comprendre la sortie de la commande « docker stats »

Commande source sous Linux

Comment exécuter des commandes Shell via un serveur HTTP

Ccat - Coloriser la sortie de la commande Cat

Comment rediriger la sortie de la commande shell

Interface de commandes

Commande source sur Linux expliquée