如何限制docker run执行时间?
我想在docker容器中运行命令。如果该命令花费了3秒钟以上的时间,则应删除该容器。
我以为可以通过使用中的--stop-timeout
option 来实现此目标docker run
。
但是我的命令似乎出了点问题。
例如,docker run -d --stop-timeout 3 ubuntu:14.04 sleep
100命令创建一个持续3秒以上的Docker容器。第三秒后,容器不会停止或删除。
我是否误解了--stop-timeout
?
该文件说:
--stop-timeout
停止容器的超时时间(以秒为单位)
这是我的Docker版本:
Client: Version: 17.12.0-ce
API version: 1.35
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:03:51 2017
OS/Arch: darwin/amd64
Server:
Engine:
Version: 17.12.0-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:12:29 2017
OS/Arch: linux/amd64
Experimental: true
API版本比1.25更新。
回答:
该--stop-timeout
选项是docker在使用docker stop
命令时等待容器停止的最长时间。
当通知容器或命令运行完成时,容器将停止,因此,如果将睡眠时间从100更改为1,您将看到容器在第二秒后停止。
我建议您执行的操作是将ENTRYPOINT
容器的更改为您创建的脚本,该脚本将执行所需的脚本,并从内部跟踪执行时间,并在超时时退出。
之后,您可以使用--rm
脚本启动后将其删除的选项来启动容器。
一个小例子。
Dockerfile:
FROM ubuntu:16.04ADD ./script.sh /script.sh
ENTRYPOINT /script.sh
script.sh:
#!/bin/bashtimeout=5
sleep_for=1
sleep 100 &
find_process=$(ps aux | grep -v "grep" | grep "sleep")
while [ ! -z "$find_process" ]; do
find_process=$(ps aux | grep -v "grep" | grep "sleep")
if [ "$timeout" -le "0" ]; then
echo "Timeout"
exit 1
fi
timeout=$(($timeout - $sleep_for))
sleep $sleep_for
done
exit 0
使用以下命令运行它:
docker build -t testing .docker run --rm testing
该脚本将sleep 100
在后台执行,检查其是否仍在运行以及是否已达到5秒的超时,然后退出。
这可能不是最好的方法,但是如果您想做一些简单的事情可能会有所帮助。
以上是 如何限制docker run执行时间? 的全部内容, 来源链接: utcz.com/qa/431761.html