はじめに
開発向けでなく本番運用のDocker containerの場合、 FROM scratch のようにshやbashコマンドの無いシンプルなcontainerを利用すると思います。
そんなcontainerに対してログインして中を覗きたい!となることが個人的によくあるので、やり方を調べました。
力技: コマンドが無いならコピーすればいい!
対処は単純で、コマンド実行が可能となるコマンドをコピーして利用すればいい! 今回はホスト: Ubuntu Linux環境で試しました。
- コピー対象のコマンドを用意する。 今回は
busyboxを使用しました。/bin/busyboxにあるとします。 -
docker container psでログインしたいdocker containerのIDを確認。 ここでは0123456789abとします。 -
docker cp /bin/busybox 0123456789ab:/でbusyboxをコピー -
docker exec -it 0123456789ab /busybox shでコピーしたbusyboxを使ってでログイン
$ which busybox
/bin/busybox
$ docker container ps | grep some_keyword
0123456789ab xxxxxxxxxx "run command" 2 days ago Up 2 days
$ docker cp /bin/busybox 0123456789ab:/
$ docker exec -it 0123456789ab /busybox sh
BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1.4) built-in shell (ash)
Enter 'help' for a list of built-in commands.
/ #
これでログインできたので、あとは好きにデバッグしましょう。
終わったら rm で消しましょう
docker exec -it 0123456789ab /busybox rm /busybox
参考
busyboxのコピーを参考にしました: Debugging “FROM scratch” on Kubernetes
docker cp でファイルをホストからコンテナへコピーする