[英]Docker kill an infinite process in a container after X amount of time
我正在使用此Docker 問題中找到的代碼來基本上啟動一個容器在20秒內運行一個進程,如果該過程完成 / 未完成 / 執行失敗 / 超時 ,則無論如何該容器都會被殺死。
我當前使用的代碼是這樣的:
#!/bin/bash
set -e
to=$1
shift
cont=$(docker run -d "$@")
code=$(timeout "$to" docker wait "$cont" || true)
docker kill $cont &> /dev/null
echo -n 'status: '
if [ -z "$code" ]; then
echo timeout
else
echo exited: $code
fi
echo output:
# pipe to sed simply for pretty nice indentation
docker logs $cont | sed 's/^/\t/'
docker rm $cont &> /dev/null
但是,如果您運行無限進程(例如此python無限循環),那幾乎是完美的:
while True:
print "inifinte loop"
閱讀了片刻后,我認為整個系統都卡了,應用程序崩潰了,我認為這與STDOUT Buffer有關,但我絕對不知道那是什么意思?
請在cont = $(docker run -d“ $ @”)結尾處添加&
它將在后台運行該過程。
我不知道dockers,但如果仍然無法停止,您也可以在此行之后添加以下內容:
mypid = $! 睡覺20 &&殺死$ mypid
問候
您遇到的問題是正在將大量數據寫入stdout的進程。 這些消息記錄到一個無限增長的文件中 。 看一下(取決於您的系統日志文件的位置):
sudo find /var/lib/docker/containers/ -name '*.log' -ls
您可以刪除舊的日志文件(如果它們不重要)。 一種可能性是在文件最大大小的ulimit限制下啟動docker run -d
守護程序。 添加到腳本的開頭,例如:
ulimit -f 20000 -c 0
這將文件大小限制為20000 * 1024字節,並禁用了核心文件轉儲,這是您期望從強制寫入失敗的無限循環中獲得的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.