【发布时间】:2019-10-31 18:22:50
【问题描述】:
上下文
我正在编写一个 dockerfile,在其中运行基于 alpine:3.9 docker 映像的服务器应用程序。我通过运行它并使用curl 发送GET 请求来测试我的应用程序是否正确安装。
我会发送请求,直到得到答复。因此,如果出现问题,我想使用内置的 timeout 函数使测试超时。
先决条件
我在 debian 上使用 docker version 19.03.4, build 9013bf583a。
问题
命令:
docker run --rm -it alpine:3.9 timeout -t 2 /bin/sh -c 'sleep 5; echo "Not to be seen..."'
退出显示Not to be seen...。
如果我以这种方式使用超时,超时似乎被忽略了......如果我把它放在一个 docker 文件中,我也会遇到同样的问题。
FROM alpine:3.9
RUN timeout -t 2 /bin/sh -c 'sleep 5; echo "Not to be seen..."'
docker build -t test .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM alpine:3.9
---> 055936d39205
Step 2/2 : RUN timeout -t 2 /bin/sh -c 'sleep 5; echo "Not to be seen..."'
---> Running in 0fa22cd02173
Not to be seen...
Removing intermediate container 0fa22cd02173
---> e88107c3811b
Successfully built e88107c3811b
Successfully tagged test:latest
我们可以看到控制台显示Not to be seen...。
如何解决这个问题?
反思/测试
我测试了很多东西,超时功能运行良好。在dockerfile中使用或者在docker run函数中传递应该是有问题的...
当我尝试时:
docker run --rm -it alpine:3.9 /bin/sh
# Then in container
timeout -t 2 /bin/sh -c 'sleep 5; echo "Not to be seen..."'
以状态码 143 退出。并显示 Terminated。
当我尝试时:
docker run --rm --name test -td alpine:3.9 /bin/sh
docker exec -it test timeout -t 2 /bin/sh -c 'sleep 5; echo "Not to be seen..."'
退出并返回状态码 143。没有按预期显示。
【问题讨论】: