HOWTO · Docker

Docker コンテナのシェルに入る

Docker は、コンテナーに入るのに使用できる複数の方法を提供しますが、これにはさまざまな理由が考えられます。このチュートリアルでは、Docker コンテナのシェルに入る方法を示します。

このチュートリアルでは、複数の方法を使用して Docker のコンテナーシェルに入る方法を示します。

docker exec を使用して Docker コンテナのシェルに入る

このコマンドを使用するには、コンテナを起動して実行する必要があります。以下のコマンドを使用して、システム内のコンテナのステータスを確認できます。

docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED      STATUS                    PORTS     NAMES
38086474cb6c   debian    "bash"                   2 days ago   Exited (0) 2 days ago               epic_jackson
1c955bac1a84   ubuntu    "bash"                   2 days ago   Exited (0) 2 days ago               musing_morse
1296f9b9d330   nginx     "/docker-entrypoint.…"   2 days ago   Exited (255) 2 days ago   80/tcp    distracted_napier

実行中のコンテナがない場合は、簡単に作成できます。rabbitmq ベースイメージを使用してコンテナを設定します。

次に示すように、コンテナを作成する前に、docker pull コマンドを使用してレジストリからベースイメージをプルすることから始めます。

$ docker run -d rabbitmq

出力:

Dcad9f270643802092ab525796897c357026767863dade831e8c7d7d82c45712

これで、実行中のコンテナができました。繰り返しになりますが、docker ps コマンドを使用して確認できます。

$ docker ps -a

出力:

CONTAINER ID   IMAGE      COMMAND                  CREATED              STATUS          PORTS                                                 NAMES
dcad9f270643   rabbitmq   "docker-entrypoint.s…"   About a minute ago   Up 57 seconds   4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp   inspiring_moore

-it タグと一緒に docker exec コマンドを使用して、コンテナーに入力したり、ファイルを操作したり、デバッグを実行したりします。

exec コマンドを使用すると、実行中のコンテナーに対してコマンドを実行できます。-it タグを使用すると、コンテナーをインタラクティブに開くことができます。

最後に、sh コマンドは、コンテナ内でコマンドを実行するための基本的なシェルプロンプトを開きます。

isaactonyloi@DESKTOP-HV44HT6:~$ docker exec -it dcad9f270643 sh
#

Docker コンテナーに入ったので、コンテナー内からさまざまなコマンドを実行できます。exit コマンドを入力し、Enter キーを押してこのモードからメインターミナルに戻ります。

docker container attach を使用して Docker Container のシェルに入る

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

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

この目的のために、以下に示すように docker ps を使用します。前のセクションの rabbitmq コンテナを引き続き使用しています。

$ docker ps -a

出力:

CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS          PORTS                                                 NAMES
dcad9f270643   rabbitmq   "docker-entrypoint.s…"   39 minutes ago   Up 38 minutes   4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp   inspiring_moore

Docker コンテナが停止した場合は、ここで行ったように、最初に docker start コマンドを使用して Docker コンテナを起動する必要があります。

$ docker start dcad9f270643
dcad9f270643

これで、Docker コンテナーが期待どおりに機能しない場合は、docker container attach を実行して、コンテナー内で何が起こっているかを確認できます。

$ docker container attach dcad9f270643

出力:

2022-02-21 16:14:51.119742+00:00 [info] <0.466.0> Server startup complete; 3 plugins started.
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0>  * rabbitmq_prometheus
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0>  * rabbitmq_web_dispatch
2022-02-21 16:14:51.119742+00:00 [info] <0.466.0>  * rabbitmq_management_agent

Secure Shell(SSH)を使用して Docker コンテナのシェルに入る

最後に、一般に SSH と略されるセキュアシェルを使用して、コンテナ内でコマンドを実行することもできます。ただし、これはベースイメージにインフレーションを引き起こし、構成の問題が発生する可能性があるため、最も推奨されない方法です。

さらに、この方法では、自分でキーを管理する必要があるため、セキュリティ上の問題が発生します。また、一部のイメージはこの方法を本質的にサポートしていない可能性があるため、さらに構成が必要になる可能性があることも考慮する必要があります。

ただし、この方法を使用する必要がある場合は、次の手順に従う必要があります。

  • 最初に、SSH サービスをインストールして有効にする必要があります。
  • 次に、コンテナの IP アドレスを取得する必要があります。
  • 最後に、取得した IP アドレスを使用してコンテナに SSH で接続します。