2015-12-24 16 views
6

Ich brauche in meinem Shell-Skript die Ausgabe einiger Docker exec Befehle kennen, zum Beispiel habe ich einen nginx Container und in meinem Skript Ich betreibe:Das Ergebnis Docker exec Befehl

docker exec -it containerName /etc/init.d/nginx configtest

Ich möchte Skriptausführung nur fortsetzen, wenn nginx config test erfolgreich ist, nicht wenn fehlgeschlagen.

Ich habe versucht, $? zu verwenden, aber es ist 0 sogar dann Configtest-Ausgabe ist fehlgeschlagen (weil Docker exec erfolgreich ausgeführt wird, wie ich verstehe).

+1

'Docker exec-mynginx /etc/init.d/nginx configtest' kehrt '1' für mich, ob es ein Fehler in der Konfigurationsdatei ist – anubhava

+0

@anubhava kannst du das Beispielskript aufschreiben? Ich habe es ausprobiert: 'docker exec -it containerName /etc/init.d/nginx configtest ... echo $? ... exit' und bekam folgendes: '... Test fail ... 0' (notice 0 not expected 1) – Aliance

Antwort

3

Der api/client/exec.go#L97-L100 hat den Exit-Code erhalten:

var status int 
if _, status, err = getExecExitCode(cli, execID); err != nil { 
    return err 
} 

, die von api/client/utils.go#L84-L97

// getExecExitCode perform an inspect on the exec command. It returns 
// the running state and the exit code. 
func getExecExitCode(cli *DockerCli, execID string) (bool, int, error) { 
    resp, err := cli.client.ContainerExecInspect(execID) 
    if err != nil { 
     // If we can't connect, then the daemon probably died. 
     if err != lib.ErrConnectionFailed { 
      return false, -1, err 
     } 
     return false, -1, nil 
    } 

    return resp.Running, resp.ExitCode, nil 
} 

scheitern Also, wenn Ihr Befehl kommt, werden Sie den Exit-Code erhalten.
Obwohl, as mentioned here, you could use nginx -t instead of configtest.

5

Übersetzen Sie meinen Kommentar in eine Antwort. Dies sollte funktionieren:

docker exec -it mynginx /etc/init.d/nginx configtest && echo "pass" || echo "fail" 

Es funktioniert für mich.

1

ich this gefunden recht gut zu funktionieren:

docker exec -t -i my-container sh -c 'my-command; exit $?' 
Verwandte Themen