Closed1

EphemeralなTailscaleノードを使っているDockerコンテナの停止時にすぐにTailnetから取り除く

PlatPlat

コンテナが終了する直前に tailscale logout を実行するといい。
参考:
https://tailscale.com/kb/1080/cli#logout

ephemeral なノードで tailscale logout すると、即時で tailnet から取り除かれ、同じ名前のノードをすぐに作れるようになる。

問題は、どのようにコンテナが終了する前に実行するかだが、ChatGPT に聞いたら教えてくれたのと、ぐぐったらだいたい似たような感じのことをやっている記事があった。

ChatGPT:
https://chat.openai.com/share/109cf407-b30d-4e2d-a1fe-7c758f18832d

記事:
https://eel3.hatenablog.com/entry/2022/11/26/202339

今回はシェルスクリプトだったので次のような感じになった:

Dockerfile
# 他は省略

CMD [ "/bin/bash", "/start.sh" ]
start.sh
#!/bin/ash

# 他の処理とか

# SIGTERM シグナルを捕捉した際に実行される関数
cleanup() {
  echo "[#] Stopping..."

  if [[ $TS_AUTHKEY ]]; then
    tailscale logout
    echo "[#] Tailscale stopped"
  fi
}

# SIGTERM シグナルを捕捉するためのトラップ設定
trap 'cleanup' SIGTERM

# 無限ループ
while true; do
  sleep 1 &
  wait $!
done

# 通常、この行は到達しませんが、スクリプトが何らかの理由でここまで到達した場合、
# 明示的に終了コードを指定してスクリプトを終了させます
exit 0
このスクラップは2024/04/08にクローズされました