docker exec命令的结果

Ali*_*nce 12 bash shell docker

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

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

我想仅在nginx配置测试成功时才继续执行脚本,而不是在失败时.

我已经尝试使用$?,但它0甚至然后configtest输出失败(因为我理解的docker exec成功执行).

anu*_*ava 8

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

docker exec -it mynginx /etc/init.d/nginx configtest && echo "pass" || echo "fail"
Run Code Online (Sandbox Code Playgroud)

这个对我有用.


con*_*com 7

我发现很好用:

docker exec -t -i my-container sh -c 'my-command; exit $?'
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 5

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

var status int
if _, status, err = getExecExitCode(cli, execID); err != nil {
    return err
}
Run Code Online (Sandbox Code Playgroud)

那来自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
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您的命令失败,您将获得退出代码。
不过,正如这里提到的,您可以nginx -t使用configtest.