docker run bash でコンテナ内に入る方法:-it オプション・exec との違い・よく使うフラグを完全解説

環境&ワークフロー

「docker run bash」は Docker でコンテナ内にインタラクティブな bash シェルを起動するための代表的なコマンドです。本記事では docker run -it の各オプションの意味から、よく使うフラグ一覧、実行中コンテナへの入り方(docker exec との違い)、イメージ別の注意点まで体系的に解説します。

docker run bash の基本構文

コンテナを起動しながら bash シェルに入る基本コマンドは次のとおりです:

docker run -it IMAGE_NAME bash

例として、Ubuntu の最新イメージを使う場合:

docker run -it ubuntu bash

このコマンドで Ubuntu ベースの新しいコンテナが作成され、bash シェルが対話形式で起動します。シェルを終了するには exit を入力するか、Ctrl+D を押します。

-i と -t オプションの意味

-it は2つのオプションを組み合わせたものです:

  • -i--interactive):標準入力を開いたままにし、コマンド入力を可能にする
  • -t--tty):擬似 TTY(端末)を割り当て、通常のターミナルと同じ操作感を実現する

2つを組み合わせることで、ターミナルから bash を操作できる対話型セッションが成立します。-i だけでは見た目が崩れ、-t だけでは入力が受け付けられないため、bash セッションには必ず両方を指定します。

長い形式で書くと次のようになります(動作は同じです):

docker run --interactive --tty ubuntu bash

よく使うオプション一覧

docker run bash と組み合わせて使う主なオプションをまとめます:

オプション 説明 使用例
-it インタラクティブな TTY セッション docker run -it ubuntu bash
--rm コンテナ終了時に自動削除 docker run --rm -it ubuntu bash
--name コンテナに名前を付ける docker run --name mytest -it ubuntu bash
-e 環境変数を設定する docker run -e MY_VAR=value -it ubuntu bash
-v ホストのディレクトリをマウント docker run -v $(pwd):/app -it ubuntu bash
-p ポートをホストに公開 docker run -p 8080:80 -it nginx bash
-w コンテナ内の作業ディレクトリを指定 docker run -w /app -it ubuntu bash

–rm オプションのすすめ

bash シェルを使った一時的な動作確認では、--rm を付けることを強くおすすめします。終了後にコンテナが自動削除されるため、使い捨てのテスト環境として非常に便利です:

docker run --rm -it ubuntu bash

--rm を付けない場合、終了したコンテナが残り続けます。docker ps -a で停止済みコンテナが溜まっている場合は docker container prune で一括削除できます。

docker run vs docker exec:使い分け

docker run bash と混同しやすいのが docker exec です。両者には明確な違いがあります:

コマンド コンテナの状態 用途
docker run -it IMAGE bash 新しいコンテナを起動する イメージからテスト環境を一から作る
docker exec -it CONTAINER bash すでに動いているコンテナに入る 起動中のサービスを操作・デバッグする

実行中のコンテナに入るには次のコマンドを使います:

# 実行中のコンテナ一覧を確認
docker ps

# コンテナ名またはIDを指定して入る
docker exec -it CONTAINER_NAME bash

例えば Web サーバーのコンテナ(my-nginx)に入る場合:

docker exec -it my-nginx bash

Docker Compose 環境でコンテナに入る場合は Docker Compose で exec bash を使いこなす方法も参考にしてください。

イメージ別の注意点

bash が使えるかどうかはベースイメージによって異なります。

Ubuntu / Debian(bash 標準搭載)

最も一般的なベースイメージです。bash はデフォルトで搭載されています:

docker run --rm -it ubuntu bash
docker run --rm -it debian bash
docker run --rm -it ubuntu:22.04 bash

Alpine(bash が未搭載)

Alpine Linux は軽量さが売りですが、デフォルトでは bash が含まれていません。代わりに sh を使うか、apk で bash をインストールします:

# sh を使う(bash 不要)
docker run --rm -it alpine sh

# bash をインストールして使う
docker run --rm -it alpine sh -c "apk add --no-cache bash && bash"

CentOS / Amazon Linux(bash 標準搭載)

docker run --rm -it centos bash
docker run --rm -it amazonlinux bash

bash が見つからないエラーの対処法

docker run -it IMAGE bash を実行したときに次のエラーが出る場合、そのイメージに bash がインストールされていません:

  • executable file not found in $PATH
  • OCI runtime exec failed: exec failed: ... no such file or directory

/bin/bash をフルパスで試すか、sh で代替します:

# フルパスで試す
docker run --rm -it IMAGE /bin/bash

# sh で代替
docker run --rm -it IMAGE sh

ベストプラクティス

使い捨てコンテナには –rm を付ける

bash での動作確認が目的なら、終了後に自動削除される --rm を習慣にしましょう。docker rm を忘れてコンテナが積み上がる問題を防げます。

イメージのバージョンを固定する

latest タグは便利ですが、チームや CI 環境での再現性を高めるためにバージョンを明示的に指定することをおすすめします:

docker run --rm -it ubuntu:22.04 bash

イメージを事前に pull しておく

初回実行時はイメージのダウンロードが発生します。作業前に docker pull で最新版を取得しておくとスムーズです:

docker pull ubuntu:22.04

本番環境での直接アクセスは避ける

デバッグ目的のシェルアクセスは便利ですが、本番コンテナへの docker exec によるアクセスはセキュリティ上のリスクがあります。ログや専用の監視ツールを活用しましょう。

よくあるトラブルとその対処法

bash: command not found

イメージに bash が含まれていない場合のエラーです。sh で代替するか、「イメージ別の注意点」セクションを参照してください。

バージョンの不一致

異なる環境で Docker イメージのバージョンが合わない場合、予期しない動作が起きることがあります。IMAGE:TAG でバージョンを固定して使いましょう:

docker run --rm -it ubuntu:22.04 bash

ホストのリソース不足

コンテナがリソースを大量に消費する場合は docker stats で状況を確認します:

docker stats

まとめ

docker run bash は Docker でインタラクティブなシェルセッションを開始するための基本コマンドです。要点を整理します:

  • -it--interactive--tty の組み合わせで、bash 操作に必須
  • 使い捨てコンテナには --rm を付けてコンテナの積み上がりを防ぐ
  • 実行中のコンテナには docker run ではなく docker exec を使う
  • Alpine など bash 非搭載イメージでは sh を代替として使う
  • 本番環境でのシェルアクセスはセキュリティリスクがあるため最小限にする

Docker Compose 環境で稼働中のコンテナに入る場合は Docker Compose で exec bash を使いこなす方法も参考にしてください。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント