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で失敗した時点のコンテナに入る事が出来ました。

Docker

Posted by GENDOSU