+-
如何限制`docker run`执行时间?
我想在docker容器中运行一个命令.如果命令完成时间超过3秒,则应删除容器.

我想我可以通过在docker run中使用–stop-timeout选项来实现这个目标.

但看起来我的命令出了问题.

例如,docker run -d –stop-timeout 3 ubuntu:14.04 sleep 100命令创建一个持续时间超过3秒的docker容器.第3秒后容器未停止或删除.

我是否误解了–stop-timeout的含义?

document说

--stop-timeout Timeout (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`执行时间? - 乐贴网