Dockerfileを作っている最中にデバッグするときの基本的な手順
Dockerfileを作っている最中に動作確認中に途中で落ちてしまって、その状態でイメージの中身を確認したい時とかが多々あるかと思いますが
今回はそんなやり方、定番かもしれないですが書いてみようと思います。
まずは適当なDockerfileを作ってビルドします。
docker build --rm -t building .
このビルド時にエラーが出てイメージの作成が止まったという想定です。
docker buildで失敗すると・・・
docker imagesには
というイメージが出来ています。
こいつは
Dockerfile上のタスク(RUNとかADDとかの単位)で正常に処理が完了した状態が一時的にイメージ化されているものです。
で、docker buildで失敗した状態というのは
docker ps -aで表示される停止しているコンテナが持っています。
なので、このコンテナに入ることが出来れば、失敗の原因を調べる事ができそうですね。
コンテナ状態だと、
例えば
[hoge@localhost]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 377562f0f1c3 7d75b95648f2 "/bin/sh -c 'echo" 24 seconds ago Exited (127) 22 seconds ago focused_heisenberg
こんな感じの表示にある通り、実行コマンドとして/bin/sh -c 〜〜〜〜というのが書いてあり
普通にdocker startしてしまうと、このコマンドが動いて終わるので
このコンテナを一時的にイメージにしちゃいます。
docker commit 377562f0f1c3 builddebug
さらに、イメージ化したものをdocker runします。
docker run --rm -it builddebug /bin/bash
これで、docker buildで失敗した時点のコンテナに入る事が出来ました。