+-

我想在docker容器中运行一个命令.如果命令完成时间超过3秒,则应删除容器.
我想我可以通过在docker run中使用–stop-timeout选项来实现这个目标.
但看起来我的命令出了问题.
例如,docker run -d –stop-timeout 3 ubuntu:14.04 sleep 100命令创建一个持续时间超过3秒的docker容器.第3秒后容器未停止或删除.
我是否误解了–stop-timeout的含义?
document说
--stop-timeoutTimeout (in seconds) to stop a container
这是我的泊坞版:
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,你会看到容器在一秒钟后停止.
我建议你做的是将容器的入口点更改为您创建的脚本,该脚本将执行您想要的操作并从内部跟踪执行时间并在超时时退出.
之后,您可以使用–rm选项启动容器,该选项将在脚本完成后将其删除.
一个小例子.
Dockerfile:
FROM ubuntu:16.04
ADD ./script.sh /script.sh
ENTRYPOINT /script.sh
script.sh:
#!/bin/bash
timeout=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`执行时间? - 乐贴网