docker kill
メイン コンテナ プロセス、つまり PID 1 のプロセスにシグナルを送信するために使用されます。- PID 1 のアプリケーションは、シグナルを直接処理できます。以下のコマンドは、メインの docker プロセスを強制終了します:
$ docker kill --signal="SIGTERM" container-id/name
- ただし、PID 1 を持たないアプリケーション、つまりアプリケーションはバックグラウンド プロセスです:
- Docker コンテナ内で実行されているバックグラウンド プロセスにシングルを直接送信することはできません。
- この場合、エントリ ポイントとして実行されているシェル スクリプトで、ユーザー定義のシグナルをトラップして処理する必要があります。
- 次の
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 イメージをビルドしてコンテナを実行する
- これで、ホスト マシンからサービスを再起動できます:
$docker kill --signal="SIGUSR1" container-id/name
docker kill --signal="<signal>" <container name or id>
を使用できます 特定のコンテナーのルート プロセスにシグナルを送信します。
https://docs.docker.com/engine/reference/commandline/kill/#send-a-custom-signal--to-a-container を参照してください
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/