HOWTO · Docker

新しい Docker コンテナで Bash ターミナルを起動する方法

このチュートリアルでは、新しい Docker コンテナで bash ターミナルを起動する方法を示します。

このページの内容

Docker コンテナで Bash を開くには、コンテナの状態に応じてコマンドを選択します。対話型 Bash セッションで新しいコンテナを起動するには docker run -it IMAGE bash を使用します。すでに実行中のコンテナで別の Bash セッションを起動するには docker exec -it CONTAINER bash を使用します。docker attach CONTAINER は、ターミナルをコンテナのメインプロセスに接続したい場合にのみ使用します。別のシェルを起動するものではありません。

IMAGE は、Docker で利用可能で Bash を含むイメージに置き換えます。CONTAINER は、実行中のコンテナの名前または ID に置き換えます。以下のコマンドは構文テンプレートです。プレースホルダーは置き換える必要があり、実行された出力として示されるものではありません。

Bash の対話型シェルを使用する

新しいコンテナとその中での対話型 Bash プロンプトが必要な場合は、docker run -it IMAGE bash を使用します。-i オプションは標準入力を開いたままにし、-t はターミナルを割り当てるため、セッションは対話型コマンドラインのように動作します。bash は、Docker が新しいコンテナ内で起動するコマンドです。

たとえば、docker run -it IMAGE bash の IMAGE をイメージ名に置き換えます。イメージには Bash が含まれている必要があります。最小限のイメージでは sh または別のシェルしか提供されない場合があります。このコマンドはコンテナを作成して起動するため、すでに存在するコンテナでシェルを開くこととは異なります。停止したコンテナを再利用したい場合は、まずそれを起動し、実行状態になってから docker exec を使用します。

docker exec コマンドを使用する

すでに実行中のコンテナで新しいプロセスとして Bash を起動するには、docker exec -it CONTAINER bash を使用します。docker exec は停止したコンテナを起動しません。実行中のコンテナの名前と ID を確認するには docker ps を使用し、停止したコンテナも確認する必要がある場合は docker ps -a を使用します。目的の停止中コンテナを docker start CONTAINER で起動してから、docker exec コマンドを実行します。

イメージに Bash がインストールされていない場合は、イメージが sh を提供していれば docker exec -it CONTAINER sh を試します。シェルコマンドはコンテナ内に存在しなければなりません。どちらの docker exec の形式も別の対話型プロセスを作成するため、コンテナのメインプロセスが実行を続ける間の検査やトラブルシューティングに役立ちます。

docker attach コマンドを使用する

実行中のコンテナのメインプロセスにターミナルの入力ストリームと出力ストリームを接続するには、docker attach CONTAINER を使用します。そのプロセスが必要な対話型セッションをすでに提供している場合に便利です。たとえば、コンテナがシェルをメインプロセスとして起動された場合、attach はそのプロセスに再接続します。

Attach は Bash やその他の新しいコマンドを起動しません。コンテナのメインプロセスがアプリケーションである場合、attach はそのアプリケーションのストリームに接続します。別のシェルプロンプトが得られるわけではありません。メインプロセスと並行してシェルを起動する必要がある場合は、docker exec -it CONTAINER bash(または利用可能であれば sh)を選択します。要するに、docker run は新しいコンテナを起動し、docker exec は実行中のコンテナでコマンドを起動し、docker attach は既存のメインプロセスに接続します。