带有shell脚本的Docker容器忽略SIGTERM

gkl3eglg  于 2023-02-05  发布在  Shell
关注(0)|答案(2)|浏览(160)

我有一个非常简单的Docker容器,它运行一个bash脚本:

# syntax=docker/dockerfile:1.4

FROM alpine:3
WORKDIR /app

RUN apk add --no-cache \
    curl bash sed uuidgen

COPY demo.sh /app/demo.sh
RUN chmod +x /app/*.sh

CMD ["bash", "/app/demo.sh"]
#!/bin/bash

echo "Test 123.."
sleep 5m
echo "After sleep"

使用docker run <image>运行容器时,不能使用docker stop <name>停止容器,只能终止容器。
我试着搜索,但所有与"bash"和"docker"导致我用shell脚本管理主机上的docker。

q5lcpyga

q5lcpyga1#

sleep是不可中断命令的示例;在sleep完成之前,shell永远不会收到SIGTERM
一个常见的解决方法是在后台运行sleep,然后立即等待它,这样当信号到达时,运行的是shell内置的wait,并且wait * 是 * 可中断的。

echo "Test 123..."
sleep 5 & wait
echo "After sleep"
c3frrgcw

c3frrgcw2#

你能试着在sleep语句之前加上这个吗?

trap "echo Container received EXIT" EXIT

或者做docker stop -t 5 container

相关问题