Lesen von stdout in der Pipeline mit "-" schlägt für "Docker exec" fehl

1050
Sridhar-Sarnobat

Ich möchte ein Bash-Terminal für meine Docker-Instanz starten, indem ich die erste Container-ID an das Docker-Exec weiterleitet:

docker ps | head -2 | grep -v CONTAINER | cut -d' ' -f1 | docker exec -i -t - bash 

Das Finale -soll den Standardwert des vorherigen Pipeline-Prozesses als Variable übergeben. Stattdessen bekomme ich:

Error response from daemon: no such id: - 

Ich würde vermuten, dass das dockerProgramm stört, wie die Shell die Argumente liest.

Gibt es da einen Weg? (entweder über das dockerProgramm oder eine Shell-Lösung).


Zusätzliche Information

Diese Subpipeline:

docker ps | head -2 | grep -v CONTAINER | cut -d' ' -f1 

produziert Ausgabe:

7dae6507d01a 

welches ist richtig. Also keine Mühe hier.

2

1 Antwort auf die Frage

2
user2313067

-wird nicht von der Shell analysiert, es ist nur ein Argument, das einige Befehle als "read from stdin" erkennen. Anscheinend tut Docker nicht.

Sie müssen xargs verwenden, um die ID hier als echtes Argument zu übergeben. Das sollte funktionieren:

 docker ps | head -2 | grep -v CONTAINER | cut -d' ' -f1 | xargs -I '{}' docker exec -i -t '{}' bash 
Dumm mich - ich habe versucht, mit "-" zu schlau zu werden, was ich kürzlich gelernt habe, während ich jahrelang "xargs" selbst mit "-I" verwende! Fluch des Wissens Sridhar-Sarnobat vor 8 Jahren 0