アンドロイド

Dockerコンテナに接続する方法

目次:

Anonim

実行中のDockerコンテナーに接続すると、コンテナー内で何が起こっているかを確認したい場合に役立ちます。 Dockerコンテナーが期待どおりに機能しない場合は、コンテナーにアタッチするか、コンテナーにシェルを取得して ps top などのコマンドを実行します。 コンテナを入力して、新しいパッケージをインストールし、そこから新しいDockerイメージを構築することもできます。

このチュートリアルでは、コンテナのメイン実行プロセスにアタッチする方法と、実行中のコンテナにシェルを取得する方法について説明します。

コンテナに接続する

コンテナで複数のプロセスを実行することは可能ですが、ほとんどのdockerコンテナは単一のプロセスのみを実行しています。 コンテナの起動時に実行されるコマンドは、 ENTRYPOINT および/または RUN 命令を使用して指定されます。

docker attach コマンドを使用すると、実行中のコンテナに端末を接続できます。 これは、標準出力に書き込まれている内容をリアルタイムで確認したい場合や、プロセスを対話式に制御したい場合に便利です。

attach コマンドの動作を理解するために、公式のNginxイメージを使用して、新しい分離されたNginxコンテナーを実行してみましょう。

docker container run --name my_nginx -d -p 8080:80 nginx

-p 8080:80 オプションは、コンテナのポート8080をホストマシンのポート80にバインドするようにDockerに指示します。

コンテナをリストして、「my_nginx」コンテナが実行されていることを確認します。

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e1c4974a8d8 nginx "nginx -g 'daemon of…" 3 minutes ago Up 2 seconds 0.0.0.0:8080->80/tcp my_nginx

コンテナのIDまたは名前を使用してコンテナに接続します。

docker container attach my_nginx

コンテナの実行時に実行されるnginxイメージのデフォルトコマンドは CMD 設定されます。 attach コマンドを実行すると、端末は nginx プロセスに接続します。

ブラウザで 127.0.0.1:8080 を開くと、nginxプロセスの出力をリアルタイムで見ることができます。

192.168.33.1 - - "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-" 192.168.33.1 - - "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

コンテナログにアクセスするには、 docker logs コマンドを使用することをお勧めします。

コンテナを停止せずにデタッチするには、 CTRL-p CTRL-q キーの組み合わせを使用します。 CTRL-c 押すと、コンテナが停止します。

接続している実行中のプロセスが入力を受け入れる場合、指示を送信できます。

コンテナーへのシェルを取得する

docker exec コマンドを使用すると、実行中のコンテナー内でコマンドを実行できます。

exec コマンドがどのように機能し、どのように使用してコンテナシェルに入ることができるかを確認するには、最初に新しいコンテナを起動します。 公式のMySQLイメージを使用します。

docker container run --name my_mysql -d mysql

これにより、「my_mysql」という名前のコンテナが作成されます。

コンテナ内でコマンドを実行するには、次のコマンドを実行します。

docker container exec -it my_mysql ls /var

-i オプションはインタラクティブを表し、 -t はDockerに疑似TTYデバイスを割り当てるように指示します。 ls コマンドは、コンテナの /var ディレクトリ内のすべてのファイルとディレクトリをリストします。

backups cache lib local lock log mail opt run spool tmp

コンテナにシェルを取得する、つまり、コンテナの内部に入るには、シェルバイナリを実行して新しいシェルセッションを開始します。 sh bash 、またはイメージに含まれている他のシェルを使用できます。

以下のコマンドは、コンテナ内に新しいBashセッションを作成します。

docker container exec -it my_mysql /bin/bash

コマンドプロンプトが変わり、コンテナシェルで作業していることが示されます。

ここから、他のLinuxサーバーで実行するのと同じ方法でコマンドを実行できます。 たとえば、現在の環境変数のリストを取得するには、 env ます。

env

出力は次のようになります。

HOSTNAME=e0214d97e0fe MYSQL_ROOT_PASSWORD=my-secret-pw PWD=/ HOME=/root MYSQL_MAJOR=8.0 GOSU_VERSION=1.7 MYSQL_VERSION=8.0.17-1debian9 TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env

結論

docker exec および docker attach コマンドを使用すると、実行中のコンテナーに接続できます。 コンテナへの対話型シェルを取得するには、 exec コマンドを使用して新しいシェルセッションを開始します。 attach コマンドは、実行中のコンテナに端末を接続します。

ドッカー