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 $?'
- Bashparsingdocker状态以检查本地图像是否是最新的
- “usermod:UID'0'already exists”why?
- 如何在Docker容器中启用颜色?
- “/ bin / sh:1:[”apache2ctl“,在docker中找不到
- 如果服务正在运行,如何从docker得到真或假的响应
- 在Docker容器启动时启动bash脚本不起作用
- 如何写一个自动进入“docker集装箱”和做其他事情的bash脚本?
- bash:如何编写一个shell脚本来从DigitalOcean液滴内的MongoDB Docker容器中读取一个mongodump来备份MongoDB数据库?
- 确定一个进程在windows / iis中运行