gpt4 book ai didi

docker - 如何限制 `docker run` 执行时间?

转载 作者:行者123 更新时间:2023-12-04 22:18:32 27 4
gpt4 key购买 nike

我想在 docker 容器中运行一个命令。如果命令完成时间超过 3 秒,则应删除容器。

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

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

例如,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



这是我的 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 stop 时 docker 应等待容器停止的最长时间命令。

当容器被告知或命令运行完成时,容器将停止,因此如果您将 sleep 从 100 更改为 1,您将看到容器在一秒钟后停止。

我建议你做的是改变 ENTRYPOINT将您的容器添加到您创建的脚本中,该脚本将执行您想要的内容并从内部跟踪执行时间并在超时时退出。

之后,您可以使用 --rm 启动您的容器。脚本完成后将其删除的选项。

一个小例子。

Dockerfile:

FROM ubuntu:16.04

ADD ./script.sh /script.sh

ENTRYPOINT /script.sh

脚本.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 - 如何限制 `docker run` 执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48299352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com