0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

目的

Dockerの稼働中のコンテナ内をデバッグする。

メリット

  • Docker内であっても、デバッグできる。
  • ブレークポイントを仕掛けて一行一行デバッグできる!

方法

今回は、Visual Studio Codeの拡張機能、Remote SSHを使用してDocker内のデバッグをする。

背景

前回、つよつよエンジニアからSSH接続を用いてVisualStudioCodeでデバッグする方法を教わった。

そのときに、ついでに、Docker内にも入ってのデバッグ方法を教えてもらった。

SSHで接続してVSCodeに持ち替えるだけでいっぱいいっぱいだったため、「後で読む」をクリックするがごとくスルーしていた。バグが起きた時に覚えればいいだろう、と思ったのだった。

そしてすぐにプログラムが動かなくなり、肩をたたかれることになった。

手順

  • Visual Studio CodeでRemoteSSHの拡張機能をインストールする(初回のみ。)

image.png

  • Dev Containersもインストールする(初回のみ。)

image.png

  • デバッグ用コードを記述する。

docker-compose.yamlにデバッグ用のコードを記述する。
例えば、起動したら無限ループして待っておいてもらうようにする。

docker-compose.yaml
command: bash -c "while true; do sleep 1; done" 

こんな感じである。

image.png

こうすると、DockerfileのCMD ["python", "./main.py"]のコマンドをオーバライドしてbashの無限ループにおきかえることができる。

  • docker compose up --buildでコンテナを起動する

docker compose up --buildを用いてコンテナを起動する。

(main.pyなどが実行されない。)

  • Remote SSHで接続する

VisualStudioCodeの左下に現れるオレンジのアイコンをクリックする。

image.png

Attach to Running Containerを実行し、目当てのコンテナを選んで起動する。

image.png

  • コンテナ内にも、いろいろな拡張機能を入れる。

表側にデバッグ用の環境が入っていても、コンテナ内には入っていない。
改めてインストールする必要がある。

image.png

Python、Pylance(デバッグ用)、PythonDebugger(デバッグ用)、それとこっちにもRemote-SSHやDev Containersをいれよう。

  • 目当てのフォルダを選択する

たとえば俺の環境の場合はcodeというフォルダにコード一式が入っている。
rootではない。
初回で、コード類がイマイチどこにあるかよくわからないならlsコマンドやcdコマンドを駆使して探しても良い。

このあいだは、結構待たされるので、コーヒーなり紅茶なりエナドリなりを用意してじっくり待つとよいだろう。

  • Run and Debugを実行する

左のメニューから、Run and Debugを実行する。
(※別の設定をいじっているため、私の環境だとわかりやすく紅に染まっている)

image.png

mainで止まるようにブレークポイントを仕掛けておく。

image.png

止まってくれた!

image.png

これで変数の中身を覗きたい放題になる。
いえーい。

どういうときに活躍したか

「なんか動かねぇけど何が原因なの? これ」という絶望をしたときにとても良い。

例えば、テスト用インスタンスでは動くのに、本番用インスタンスになると動いてくれない件についてで起こったトラブルを解消できた。

例外が起こっているのがQdrantの関数呼び出し時だということが(loggingやprintを用いなくても)わかったのだ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?