2015-12-24 17 views
6

Tôi cần phải biết trong shell script của tôi đầu ra của một số lệnh Docker exec, ví dụ tôi có một thùng chứa nginx và trong kịch bản của tôi, tôi chạy:Kết quả của Docker lệnh exec

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

Tôi muốn để tiếp tục thực hiện kịch bản chỉ khi kiểm tra cấu hình nginx là thành công, không phải khi thất bại.

Tôi đã thử sử dụng $?, nhưng nó là 0 thậm chí sau đó đầu ra configtest không thành công (vì trình quản lý docker được thực thi thành công, như tôi đã hiểu).

+1

'Docker exec -nó mynginx /etc/init.d/nginx configtest' lợi nhuận '1' cho tôi nếu có bất kỳ lỗi trong tập tin cấu hình – anubhava

+0

@anubhava bạn có thể viết kịch bản mẫu không? Tôi đã thử điều này: 'docker exec -it containerName /etc/init.d/nginx configtest ... echo $? ... thoát' và nhận các thông tin sau: '... Kiểm tra thất bại ... 0' (thông báo 0 không được mong đợi 1) – Aliance

Trả lời

3

Các api/client/exec.go#L97-L100 không lấy mã lối ra:

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

đó xuất phát từ 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 
} 

Vì vậy, nếu lệnh của bạn thất bại, bạn sẽ nhận được mã thoát.
Mặc dù, as mentioned here, you could use nginx -t instead of configtest.

5

Dịch nhận xét của tôi thành câu trả lời. Điều này sẽ hoạt động:

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

Nó phù hợp với tôi.

1

tôi thấy this được làm việc khá tốt:

docker exec -t -i my-container sh -c 'my-command; exit $?' 
Các vấn đề liên quan