背景

Dockerにログインして、ディレクトリの構造などを確認したい場合、一般的なやり方だと以下のように起動しているコンテナのidを調べてログインをしている。

docker run {container_name}
docker ps
docker exec -it {container_id} /bin/sh

こちらの方法だと、Dockerfileで指定しているコマンドが起動直後に終了する場合、docker ps してもコンテナが既に終了しており、ログイン出来ないという事がある。

方法

docker run のオプションで -it を指定することで、コンテナが終了してもログイン出来るようになる。-it はそれぞれ独立したオプションで、-i(interactive) , -t(tty) 1

コマンドとしては以下のような感じ:

docker run -it --entrypoint /bin/sh {container_name}

Tips: container_namedocker images で確認。docker build -t {name}:{tag} でビルド時に名前を指定可能。

docker composeの場合

docker composeでも同様の事をしたい場合は、docker-compose.yamlで以下のオプションを追加すればよい。

tty: true
stdin_open: true

* service.{service_name} の階層に書く