docker exec と docker logs でコンテナの中身を覗いてみよう!初心者向け完全ガイド

docker icon
Docker

こんにちは、とまだです。

みなさん、Dockerコンテナを動かしていて「中で何が起きてるの?」って思ったことはありませんか?

私も最初は、コンテナがブラックボックスのように感じていました。 エラーが出ても原因がわからず、途方に暮れたことも。

でも実は、コンテナの中身を確認する方法があるんです。

今回は、docker execdocker logs という2つのコマンドを使って、コンテナ内部を調査する方法を解説します。

コンテナの中身を見たくなる瞬間

アプリが動かない。 エラーメッセージが表示される。 設定ファイルが正しいか確認したい。

こんな場面、ありますよね。

コンテナは便利な反面、中で何が起きているか見えにくいです。 まるで、鍵のかかった部屋の中を覗きたいような感覚。

でも大丈夫です。

docker exec と docker logs を使えば、その鍵を開けられます。

docker exec:コンテナの中に入る魔法の鍵

コンテナに入るってどういうこと?

docker exec を使うと、動いているコンテナの中に入れます。 まるで、走っている電車に飛び乗るような感じ。

以下のコマンドを実行してみましょう。

docker exec -it my-container bash

このコマンドで、コンテナの中のターミナルが開きます。 普通のLinuxサーバーにログインしたのと同じ状態になるんです。

ここで -it オプションが重要です。 これを付けないと、対話的な操作ができません。

中に入ったら何ができる?

コンテナの中では、普通のLinuxコマンドが使えます。

ファイルを見たければ:

cat /etc/nginx/nginx.conf

プロセスを確認したければ:

ps aux

ディレクトリ構造を確認したければ:

ls -la /app

まさに、部屋の中を自由に歩き回る感覚です。

一発コマンドで済ませる方法

わざわざ中に入らなくても、確認できることもあります。

docker exec my-container cat /etc/hosts

これで、ファイルの中身だけサッと確認。 コンビニで買い物するくらい手軽です。

docker logs:コンテナの日記を読む

ログって何が見えるの?

docker logs は、コンテナが出力した全てのメッセージを表示します。 まるで、コンテナが書いている日記を読むような感じ。

基本的な使い方はシンプルです。

docker logs my-container

これだけで、今までのログが全部表示されます。

リアルタイムでログを追いかける

アプリケーションの動きを監視したいときは、-f オプションが便利。

docker logs -f my-container

新しいログが出るたびに、画面に表示されます。 テレビの生放送を見ているような感覚ですね。

止めたいときは Ctrl + C を押せばOKです。

最新のログだけ見たいとき

全部のログは多すぎる! そんなときは、最新の部分だけ表示できます。

docker logs --tail 50 my-container

これで最新の50行だけ表示。 新聞の見出しだけ読むような感じです。

実際のトラブルシューティング例

ケース1:Webサーバーが応答しない

先日、Nginxコンテナが動かなくて困りました。

まず、ログを確認。

docker logs nginx-container | grep error

エラーメッセージから、設定ファイルに問題がありそう。

次に、コンテナに入って確認。

docker exec -it nginx-container bash
nginx -t  # 設定ファイルのテスト

案の定、設定ファイルに記述ミスがありました。

ケース2:アプリケーションが起動しない

Node.jsアプリが起動しないときの話です。

ログを見ると、モジュールが見つからないエラー。

docker logs app-container
# Error: Cannot find module 'express'

コンテナに入って確認すると...

docker exec -it app-container bash
ls node_modules/

node_modulesが空っぽでした。 ビルド時の問題だとわかり、すぐに解決できました。

便利な使い方のコツ

エラーだけを抽出する

ログから特定の文字列を探すには、grepと組み合わせます。

docker logs my-container 2>&1 | grep -i error

2>&1 で標準エラー出力も含めて検索。 これで、エラーメッセージだけを効率的に見つけられます。

複数のコンテナを同時に監視

docker-composeを使っている場合も、同じ要領です。

docker-compose ps  # コンテナ名を確認
docker logs -f web-container &
docker logs -f db-container &

複数のログを同時に追いかけられます。 まるで、複数のテレビ画面を同時に見るような感じ。

注意すべきポイント

本番環境では慎重に

docker exec でコンテナに入ると、何でもできてしまいます。 うっかりファイルを削除したら大変。

本番環境では、以下を心がけましょう。

  • 読み取り専用のコマンドから始める
  • 変更を加える前に必ずバックアップ
  • できれば開発環境で事前にテスト

ログの量に気をつけて

大量のログを一気に表示すると、ターミナルがフリーズすることも。

docker logs my-container | tail -n 1000 | less

このように、表示量を制限しながら確認するのがおすすめです。

セキュリティへの配慮

ログに機密情報が含まれていないか注意が必要です。 パスワードやAPIキーが表示されていたら危険。

アプリケーション側で、機密情報をログに出さない工夫も大切です。

まとめ

docker exec と docker logs は、コンテナ運用の強い味方です。

docker exec は、コンテナの中に入って自由に調査できる鍵。 docker logs は、コンテナが残した足跡を辿る地図。

この2つを使いこなせば、コンテナのトラブルも怖くありません。

最初は難しく感じるかもしれません。 でも、何度か使っているうちに必ず慣れます。

エラーに遭遇したら、まずはログを見る。 詳しく調べたければ、コンテナに入る。

この流れを覚えておけば、きっと役に立ちます。

みなさんも、ぜひ実際に手を動かして試してみてください!

共有:

著者について

とまだ

とまだ

フルスタックエンジニア

Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。

著者の詳細を見る →