[英]Docker kill not working when executed in shell script
在終端中逐行手動運行命令時,以下命令可以正常工作:
docker create -it --name test path
docker start test
docker exec test /bin/sh -c "go test ./..."
docker stop test
docker rm -test
但是當我將其作為shell腳本運行時,Docker容器既不會停止也不會刪除。
#!/usr/bin/env bash
set -e
docker create -it --name test path
docker start test
docker exec test /bin/sh -c "go test ./..."
docker stop test
docker rm -test
如何在Shell腳本中使其工作?
如果使用set -e
則腳本將在任何命令失敗時退出。 例如,當命令返回代碼!= 0時。這意味着如果您的start
, exec
或stop
失敗,則將剩下一個容器。
您可以刪除set -e
但是您可能仍想將go test
命令的返回碼用作整體返回碼。
#!/usr/bin/env bash
docker create -it --name test path
docker start test
docker exec test /bin/sh -c "go test ./..."
rc=$?
docker stop test
docker rm test
exit $rc
實際上,使用set -e
非常有用,它可以捕獲很多在大多數腳本中被忽略的問題。 稍微復雜一點的解決方案是使用陷阱在EXIT
上運行清理步驟,這意味着可以使用set -e
。
#!/usr/bin/env bash
set -e
# Set a default return code
RC=2
# Cleanup
function cleanup {
echo "Removing container"
docker stop test || true
docker rm -f test || true
exit $RC
}
trap cleanup EXIT
# Test steps
docker create -it --name test path
docker start test
docker exec test /bin/sh -c "go test ./..."
RC=$?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.