🚀

【Azure】Azure Container Instancesのコンテナ内でコマンドを実行する

に公開

背景

Azure Container Instancesで作成したコンテナにてPythonを実行しようとした際にリアルタイムでコマンド結果を確認したいと思い、試行錯誤しました!

下記のような結果を確認したい...

ファイル1を作成しました!✅
ファイル2を作成しました!✅
ファイル3を作成しました!✅

LogAnalyticsやAzureMonitorを使う方法もあるがお金がかかる...
→作成したコンテナにログインしてローカルのターミナルで確認できないか?

MSLearnにドキュメントがあったが作成したコンテナにexecコマンドを実行してもBash シェルから抜けてしまう...
https://learn.microsoft.com/ja-jp/azure/container-instances/container-instances-exec

結論

tail -f /dev/nullを実行しプロセスを継続させる

az container create \
  -- <・・略・・>
  --command-line "tail -f /dev/null"

試したこと

sleepを入れていないコンテナで下記を実行

az container exec \
  --resource-group $RESOURCE_GROUP \
  --name yourcontainername> \
  --exec-command "/bin/sh"

→コマンド実行後に抜けてしまう...

コンテナの状態を確認するコマンドを実行

az container show \
  --resource-group <RESOURCE_GROUP> \
  --name <CONTAINER_NAME> \
  --query "instanceView.state"

→"Succeeded"となり、"Running"ではないことが判明

--restart-policyのオプションをAlwaysにする。

  • Always: コンテナが終了しても自動的に再起動します。
  • OnFailure: コンテナがエラーで終了した場合のみ再起動します。
  • Never: コンテナが終了しても再起動しません(現在の設定)。
az container create \
  -- <・・略・・>
  --restart-policy Always

→execコマンド実行後に抜けてしまう...

コンテナの状態ではなく、「中で実行されているプロセス」が終了している?
→ACIではTTYはサポートされていない?(公式のドキュメントがない...)
→"tail -f /dev/null"を実行するとログインできた

まとめ

上記より確認した結果をまとめると下記になります!

コンテナの状態 プロセス execできるか?
Running(再起動されている) プロセスは完了 ❌(抜けてしまう)
Running(tail -f /dev/nullなどで生存) 起動プロセスが継続中 ✅(コンテナに入れる)
GitHubで編集を提案

Discussion