docker exec命令的结果

我需要在我的shell脚本中知道一些docker exec命令的输出,例如我有一个nginx容器,并在我的脚本中运行:

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

我只想在nginxconfigurationtesting成功时才继续执行脚本执行,而不是失败。

我试过使用$? ,但是即使在configtest输出失败的情况下也是0 (因为docker exec被成功执行,据我所知)。

将我的评论翻译成答案。 这应该工作:

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

这个对我有用。

api/client/exec.go#L97-L100确实得到退出代码:

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

这来自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 } 

所以,如果你的命令失败,你将得到退出代码。
尽pipe如上所述,您可以使用nginx -t而不是configtest

我发现这工作得很好:

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