2015-03-15 17 views
5

Ich habe ein Problem beim Speichern der Ausgabe von docker run -it -d -p 43211:3000 --name appname -h hostname -v $PWD/local_dir:/root/remote_dir repo/imagename in einer BASH-Variable. Ich versuchte `backticks ', ich versuchte es auch wie die offizielle Dokumentation sagen BASH_VAR=$(docker run ...), ich versuchte sogar, die Ausgabe in einer Datei mit docker run --...>$FILE_DESCRIPTOR zu speichern, aber kein Glück, die Fehlersituation zu speichern, die Situation, wenn der Name bereits von einem anderen Container verwendet wird, so wie:Store `docker run` Befehlsausgabe in BASH-Variable

$ FATA[0000] Error response from daemon: Conflict. The name "appname" is already in use by container 7c84d8d703c8. You have to delete (or rename) that container to be able to reuse that name.

möchte ich sagen, dass es für den Erfolg Situation funktioniert, also bin ich in BASH_VAR die volle Container-ID speichern können, auf die Anwendung erfolgreich ausgeführt wird, aber leider löst dieses Problem nur die Hälfte das Problem, vor dem ich stehe.

Jede Hilfe wäre willkommen.

Danke!

+4

tut 'output = $ (Docker run -es 43211 -p -d: 3000 --Name Anwendungsname -h Hostname -v $ PWD/lokales_Dir:/root/remote_dir Repo/Image-Name 2> & 1) 'Arbeit für Sie? '2> & 1' leitet stderr nach stdout um. – hek2mgl

+0

Danke, lieber Herr! Ja, @ kek2mgl, es hat wie ein Zauber funktioniert! Der Grund, warum ich das brauche, ist, weil ich ein interaktives Docker-Container-Management-Bash-Skript mit [Dialog] (http://linux.die.net/man/1/dialog) erstelle und die Ausgabe aller Befehle analysieren muss Ich stelle hinter die Kulissen. Sie können die Frage beantworten, damit ich Ihren Kommentar als die richtige Antwort markieren kann. –

+0

Ich habe Bash-Skript wie folgt '#!/Usr/bin/bash Ergebnis = $ (Andock-run -e' SITE = WL '-h Pingnet - Name Pingnet --rm Pingnet 2> & 1) Echo $ {Ergebnis } 'und zeigt kein Ergebnis – irom

Antwort

0

Sie könnten eine while-Schleife verwenden, um jede Ausgabezeile zu lesen, während sie produziert wird, und damit etwas zu tun.

while read -r line_of_output; do 
    echo "line: $line_of_output" 

done < <(docker ... 2>&1) 

Auch, wenn Sie ein interaktives Skript schreiben, möchten Sie vielleicht

die select bash gebautet auszuchecken
$ help select 
select: select NAME [in WORDS ... ;] do COMMANDS; done 
    Select words from a list and execute commands.