docker exec と docker logs でコンテナの中身を覗いてみよう!初心者向け完全ガイド
こんにちは、とまだです。
みなさん、Dockerコンテナを動かしていて「中で何が起きてるの?」って思ったことはありませんか?
私も最初は、コンテナがブラックボックスのように感じていました。 エラーが出ても原因がわからず、途方に暮れたことも。
でも実は、コンテナの中身を確認する方法があるんです。
今回は、docker exec と docker 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 を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。
著者の詳細を見る →