簡體   English   中英

在Shell腳本中執行時Docker Kill無法正常工作

[英]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時。這意味着如果您的startexecstop失敗,則將剩下一個容器。

您可以刪除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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM