【发布时间】:2020-03-13 23:51:42
【问题描述】:
我有一个启动 docker 的 bash 脚本。由于那里存在一些错误,docker start 失败,它清楚地显示exit code 1。这是我必须运行 docker 命令的脚本
startContainer(){
echo "change directory to ..."
cd "..."
docker-compose -f ./docker-compose.yml up -d
if [[ $? -eq 0 ]]; then
echo "Executed docker-compose successfully on ${HOST_APP_HOME}"
else
echo "Failed to start container on ${HOST_APP_HOME}. Failed command: docker-compose -f ${DOCKER_CONF_FILE} up -d"
printErrorFinish
fi
}
docker-compose 命令失败,它清楚地打印了这条消息
exited with code 1
但是我的脚本没有捕获它,第一个条件 (-eq 0) 被执行。为什么它无法捕获此错误并将其视为成功命令?
【问题讨论】:
-
您知道以状态 1 退出的是
docker-compose本身,而不是它的子进程之一吗? (要清楚,以上是修辞;我断言你没有)。 -
我要做的第一件事就是停止使用
$?;将您的代码编写为if docker-compose -f ./docker-compose.yml up -d; then更加健壮,这样就不可能在您的背后发生调试陷阱或其他事情,从而在退出状态被捕获之前更改它。但是错误消息更有可能来自更深层并且没有被转发回来,所以我要过去的地方是使用sysdig来跟踪所有涉及的单个进程以及每个进程的退出状态(和看看是哪个进程写了“exited with code 1”消息)。 -
(...那个,以及该进程是否实际上以状态1退出;如果确实如此,它的父级是谁以及该父级是否实际以状态1退出,等等,直到控制权返回给 shell 脚本)。
-
如何找出错误代码 1 来自 docker-compose 命令或其他进程的位置?
-
由于您正在执行
if块,它显然来自其他东西。大概是docker-compose内部执行的东西。
标签: linux bash docker-compose