分離モードのdockerコンテナーでプログラムを実行しています。
では、このプログラムにSIGINTなどのシグナルを送信する方法は?
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/
docker kill --signal="<signal>" <container name or id>
を使用して、特定のコンテナのルートプロセスに信号を送信できます。
https://docs.docker.com/engine/reference/commandline/kill/#send-a-custom-signal--to-a-container を参照してください
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
私はドッカーコンテナのプロセス(プログラム)に希望する信号を送信することができました: