我在一个具有分离模式的docker容器中运行程序。
那么如何向这个程序发送SIGINT等信号呢?
答案 0 :(得分:60)
您可以使用docker kill --signal="<signal>" <container name or id>
将任何信号发送到给定容器的根进程。
请参阅https://docs.docker.com/engine/reference/commandline/kill/#send-a-custom-signal--to-a-container
答案 1 :(得分:10)
您可以使用nsenter进入容器空间并发送信号。
PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid kill -SIGINT <PID of your program inside your container>
更多信息:http://jpetazzo.github.io/2014/06/23/docker-ssh-considered-evil/
答案 2 :(得分:6)
docker kill
用于向主容器进程发送信号,即使用PID 1进行处理。$ docker kill --signal="SIGTERM" container-id/name
Dockerfile
。 (根据申请更新)FROM centos:6.7
# Install/Deploye the service below.
# Copy the shell script.
COPY entrypoint.sh /home
EXPOSE 8080
ENTRYPOINT ["/home/entrypoint.sh"]
以下是entrypoint.sh
。 (根据应用程序更新它)。假设我们要重新启动init.d
服务。
#start the service
/etc/init.d/<servicename> start
pid="$!"
# SIGUSR1- Single handler
my_handler() {
/etc/init.d/<servicename> restart
}
# Trap and handle the user defind singnal.
trap 'my_handler' SIGUSR1
# wait forever(Alive container.)
while true
do
tail -f /dev/null & wait ${!}
done
$docker kill --signal="SIGUSR1" container-id/name
答案 3 :(得分:1)
我设法通过以下方式向docker容器中的进程(程序)发送了我想要的信号: