Dockerでコンテナが動作しないときの確認作業など
経緯
Dockerコンテナにrailsサーバを立てて、unicornで公開したい旨の動作不良の相談を受けて対応した。
伝えたいこと
ログを見ろ、ログがわからない場合、ログの見方、見つけ方を検索・相談しよう。
今自分がどういう状況なのかわかれば、心理的負担も少なくなる。
手元でbuildし起動
最初に発生したエラーがこれ、このログはdocker desktopなどに表示されるエラー
bundler: failed to load command: unicorn (/usr/local/bundle/bin/unicorn)
/usr/local/bundle/gems/unicorn-6.1.0/lib/unicorn/configurator.rb:104:in `block in reload': directory for pid=/app/tmp/pids/unicorn.pid not writable (ArgumentError)
raise ArgumentError, "directory for #{var}=#{path} not writable"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/app/tmp/pids/unicorn.pid
この部分に権限がないから発生しているエラーだったので、Dockerfileに権限追加部分を記述
# Unicorn の PID ディレクトリの作成と権限設定
RUN mkdir -p /app/tmp/pids && \
chmod -R 755 /app/tmp/pids
再起動したが速攻で落ちる、かつ、ログが残らない
方針をコンテナ内に入ることに設定
CMDコマンドでunicornを実行していたので、そこをコメントアウトし、方針をコンテナ内に入ることを目標にした。
コメントアウトし、再ビルド。
docker run -p 3000:3000 -it rails-my-image bash
こんな感じでポートは開きつつ、ターミナル操作ができるように実行
ログはいずこ?
ls -aでlogがあるっぽい場所を見つける。
railsだったので/app/logがあった。
root@629bcfaa342d:/app# ls
Gemfile README.md app config db log public tmp
Gemfile.lock Rakefile bin config.ru lib prd storage vendor
root@629bcfaa342d:/app#
root@629bcfaa342d:/app# ls -al log
total 24
drwxr-xr-x 1 root root 4096 Nov 17 08:28 .
drwxr-xr-x 1 root root 4096 Nov 17 07:21 ..
-rw-r--r-- 1 root root 0 Nov 17 03:57 .keep
-rw-r--r-- 1 root root 0 Nov 17 08:35 production.log
-rw-r--r-- 1 root root 383 Nov 17 08:28 unicorn.stderr.log
-rw-r--r-- 1 root root 0 Nov 17 07:21 unicorn.stdout.log
root@629bcfaa342d:/app#
下記、ファイルサイズが増えていることがわかる。
-rw-r--r-- 1 root root 383 Nov 17 08:28 unicorn.stderr.log
ログを見る
root@db8c46d2bcc0:/app/log# cat unicorn.stderr.log
I, [2023-11-17T07:17:09.292116 #44] INFO -- : Refreshing Gem list
I, [2023-11-17T07:17:09.518426 #44] INFO -- : listening on addr=0.0.0.0:3000 fd=8
E, [2023-11-17T07:17:09.538492 #44] ERROR -- : Cannot load database configuration:
Could not load database configuration. No such file - ["config/database.yml"] (RuntimeError)
ファイルがなくてエラーになってる。
Could not load database configuration. No such file - ["config/database.yml"]
これのデータを作成して、データベースの設定したら起動できた。
root@629bcfaa342d:/app# bundle exec unicorn -p 3000 -c /app/config/unicorn.rb -E production
起動っていうのはCMDで指定したコマンドね。
アクセスが成功したログなんかもlogディレクトリ配下にあるから、確認すると良い。
結論
ログを見ればなんとなくわかるようになる。
慣れてくれば勘所もつかめるようになる。
あと、ChatGPTとかはガンガン使え。
マジで勉強になる。
エラーとかそのまま貼ったらええんや。
Discussion