ECS のコンテナログをコンテナインスタンスから直接取得する方法を教えてください

2022.10.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

awslogs ログドライバーを使用してコンテナのログを CloudWatch Logs に転送していますが、一時的な問題で転送に失敗しました。 可能であれば、ECS コンテナインスタンスからログを直接参照できないかと考えており、方法があれば教えてください。

どう対応すればいいの?

docker logsコマンドをお試しください。

docker logsコマンドは、コンテナの実行時から現在に至るまでのログを表示するコマンドで、Docker Engine 20.10 以降であればログドライバーに関係なく、ログを表示できます。

docker logs — Docker-docs-ja 20.10 ドキュメント

docker logs コマンドは、コンテナの実行時から現在に至るまでのログを、逐次表示します。

Use docker logs with remote logging drivers | Docker Documentation

Starting with Docker Engine 20.10, you can use docker logs to read container logs regardless of the configured logging driver or plugin.

やってみた

取得対象のコンテナが含まれる ECS タスクを選択します。

コンテナランタイム ID をメモします。

コンテナインスタンスに接続します。

接続後、コンテナインスタンスでdocker logs 【コンテナランタイム ID】を実行すると、ログが表示されます。

コマンド例

$ docker logs 999572e27ea460c7acc09b348746185a1ff6614e89e387bddda1c7d6a8bbc9cc
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
...

必要に応じて、テキストに保存します。

コマンド例

docker logs 999572e27ea460c7acc09b348746185a1ff6614e89e387bddda1c7d6a8bbc9cc > container.log

参考資料