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

Isaac Tony 2023年1月30日
  1. Bash Interactive Shell を使用する
  2. docker exec コマンドを使用する
  3. docker attach コマンドを使用する
新しい Docker コンテナで Bash ターミナルを起動する

Docker コンテナーは、アプリケーションのすべての依存関係をパッケージ化するための標準ユニットであり、どのような環境でも簡単に実行できます。コンテナは最近非常に人気があり、ほとんどの開発者は現在、アプリケーションと依存関係を管理するためにコンテナに大きく依存しています。

Docker は、Docker コンテナー内で bash ターミナルを起動することにより、シェルインスタンスにアクセスするための複数の方法を提供します。これは、Docker コンテナ内でいくつかのコマンドを実行するときに特に役立ちます。

さらに、これはデバッグ上の理由である場合もあれば、すべてが適切に構成されているかどうかを確認したい場合もあります。この記事では、実行中のコンテナーと実行されていないコンテナーに対してこれを行うために使用できるさまざまな方法について説明します。

Bash Interactive Shell を使用する

Bash は、Linux システムで一般的なコマンドプロセッサであり、ユーザーがアクションを引き起こすコマンドを入力できるようにします。Unix ベースのシステムまたは WSL と何らかのやり取りをした場合は、bash を介してさまざまなコマンドを操作する可能性があります。

同様に、Docker コンテナ内の Linux ターミナルに直接アクセスして、通常の Linuxbash の場合と同じようにコマンドを実行することもできます。このメソッドの利点の 1つは、docker exec コマンドなどの他のコマンドとは異なり、実行されていないコンテナーでこれを実行できることです。

以下に示すように、Docker レジストリの公式の rabbitmq イメージを使用して、Docker コンテナを作成し、コンテナ内の bash に直接アクセスします。これは他のコマンドで実行できます。事前にイメージを用意しておく必要があります。

docker pull rabbitmq
docker images

イメージができたので、Docker コンテナをインタラクティブに作成できます。これは、以下に示すように、実行中に docker コンテナー内でコマンドを実行できることを意味します。

$ docker run -it rabbitmq bash

出力:

root@f418a3286aae:/#

ご覧のとおり、これで Docker コンテナー内に移動し、新しいコンテナー内で bash を実行することに成功しました。これで、実際の端末で作業しているかのようにコマンドを実行できます。

たとえば、以下に示すように、このコンテナ内のファイルとディレクトリを一覧表示できます。

root@f418a3286aae:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  plugins  proc  root  run  sbin  srv  sys  tmp  usr  var
root@f418a3286aae:/#

docker exec コマンドを使用する

または、docker exec コマンドを使用して、新しい docker コンテナー内で bash を実行することもできます。ただし、以前の方法とは異なり、このコマンドでは、コンテナがすでに実行されている必要があります。そうしないと、コマンドは機能しません。

docker ps -a コマンドを使用して、コンテナーが実行されていることを確認します。使用するコンテナーが実行されていない場合は、docker start コマンドに続けてコンテナーID または名前を使用してコンテナーを開始することをお勧めします。

docker ps

-it タグと一緒に docker exec コマンドを使用します。exec コマンドを使用すると、実行中のコンテナーに対してコマンドを実行できます。-it タグを使用すると、コンテナーを対話形式で開くことができます。

以下のように実行できます。

$ docker exec -it f418a3286aae bash

出力:

root@f418a3286aae:/# ls
bin  boot  dev  etc  home  isaac  lib  lib32  lib64  libx32  media  mnt  opt  plugins  proc  root  run  sbin  srv  sys tmp  tonyloi  usr  var

この Docker コンテナ内で bash を正常に起動したので、コンテナ内からさまざまなコマンドを実行できます。あるいは、bash のないコンテナには sh を使用できます。

これは、コンテナ内でコマンドを実行できる基本的なシェルプロンプトを開くコマンドでもあります。

$ docker exec -it f418a3286aae sh

出力:

# ls
bin  boot  dev  etc  home  isaac  isaactonyloi  lib  lib32  lib64  libx32  media  mnt  opt  plugins  proc  root  run  sbin  srv  sys  tmp  tonyloi  usr  var

docker attach コマンドを使用する

docker attach コマンドを使用して、実行中の docker コンテナー内で bash を起動することもできます。これにより、コンテナーの ID を使用して、実行中のコンテナーにローカル標準の入力、出力、およびエラーストリームをアタッチできます。

その後、さまざまなコマンドを実行し、入力を受け入れ、指定されたコンテナをデバッグできます。出力、入力、およびエラーストリームをアタッチするために、実行中のコンテナが必要です。

以下に示すように、コンテナ名または ID を使用してこれを実装できます。

コード:

$ docker container attach f418a3286aae

出力:

root@f418a3286aae:/# ls
bin  boot  dev  etc  home  isaac  isaactonyloi  lib  lib32  lib64  libx32  media  mnt  opt  plugins  proc  root  run  sbin  srv  sys  tmp  tonyloi  usr  var
root@f418a3286aae:/#
著者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn