Context
Я пишу dockerfile, где запускаю серверное приложение на основе alpine:3.9
образа docker. Я проверяю, правильно ли установлено мое приложение, запустив его и отправив запрос GET
с curl
.
. Я отправляю запросы, пока не получу ответ. Поэтому в случае проблем я хочу тайм-аут своих тестов с использованием встроенной функции timeout
.
Предварительные требования
Я использую докер version 19.03.4, build 9013bf583a
в Debian.
Проблема
Команда:
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. Иdisplay 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. Ничего не отображается, как ожидалось.