Dockerコンテナのシェルに入るには?
Dockerを使い始めました。WordPressのベースイメージとdocker-composeを使っています。
最初のビルドで作成されたファイルやディレクトリを調べるために、コンテナの1つにsshで入ろうとしています。docker-compose run containername ls -la` を実行しようとしましたが、何もできませんでした。たとえ実行できたとしても、1つのコマンドを実行するよりも、ディレクトリ構造をたどることができるコンソールが欲しいです。Dockerでこれを行う正しい方法は何でしょうか?
979
20
docker attach
を使うと Docker コンテナに接続できるが、これは
sshとは違う。 例えばコンテナがウェブサーバを実行している場合、
docker attach` はおそらくウェブサーバプロセスの stdout に接続するだろう。 これは必ずしもシェルを提供するわけではない。これは既存のコンテナ内で任意のコマンドを実行できる。 例えば
もちろん、実行するコマンドはコンテナのファイルシステムに存在する必要があります。
上記のコマンドでは、`
が対象のコンテナの名前またはIDです。 docker ps
を実行し、ID(最初の列に表示される16進数の文字列)または名前(最後の列に表示される)のどちらかを使用するだけです。 例えばと実行できます:
を実行しても同じことができる:
同様に、コンテナ内でシェルを起動することもできる;
実行中のコンテナに打ち込むには、次のように入力します。
たとえば、あなた自身の理由で、本当にSSHを使用したいとします。いくつかの手順が必要ですが、実行できます。 コンテナー内で実行してセットアップするコマンドは次のとおりです。..
これで、SSHクライアントへのX11転送を使用して、グラフィカルアプリケーション(コンテナーにインストールされている場合)を実行することもできます。
関連するリソースをいくつか示します。
通知:この答えは、私が書いたツールを宣伝します。
実行中のコンテナに「貼り付け」できるコンテナ化SSHサーバーを作成しました。 このようにして、すべてのコンテナでコンポジションを作成できます。 唯一の要件は、コンテナにBashがあることです。
次の例では、「my-container」という名前のコンテナに接続されたSSHサーバーが起動します。
このSSHサービスに接続すると(SSHクライアントが選択して)、「my-container」という名前のコンテナでBashセッションが開始されます。
その他のポインタとドキュメントについては、https://github.com/jeroenpeeters/docker-sshを参照してください。
私のようにDocker Compose固有の回答を探している場合は、生成されたコンテナIDを検索する必要なく、簡単にアクセスできます。
docker-compose exec
は、docker-compose.yml
ファイルに従ってサービスの名前を取ります。したがって、「Web」サービスのBashシェルを取得するには、次のことができます。
WindowsでDockerを使用していて、コンテナへのシェルアクセスを取得する場合は、次の項目を使用します。
ほとんどの場合、Git Bashがインストールされています。 そうでない場合は、必ずインストールしてください。。
このコマンドを使用してドッカーコンテナにSSH:
場合によっては、画像がアルパインベースになることがあります。 この場合、次のようにスローされます。
/ bin / bash
が存在しないためです。 これの代わりに、以下を使用する必要があります。または。
コンテナがすでに終了している場合(エラーが原因である可能性があります)、実行できます。
または。
または。
新しいコンテナを作成し、シェルを取り込みます。 --rmを指定したため、シェルを終了するとコンテナが削除されます。
Windowsコンテナでcmdに接続するには、を使用します。
ここで、 d8c25fde2769 はコンテナIDです。
goinside
コマンドラインツールを次のようにインストールします。次の適切なターミナルサイズのドッカーコンテナー内に入ります。
____。
< h2> old answ< / h2>。このスニペットを
〜/ .profile
に入れました。これにより、誰もが次の状態で実行中のコンテナに入ることができます。
また、長寿命固定ドッカーコンテナターミナルサイズに関する問題も解決します。 あなたがそれに直面した場合、それは非常に迷惑です。
また、リンクをフォローすると、ドッカーコンテナー名もコマンドで完了します。
簡単です。!
Dockerのすべての画像をリストします。
私のシステムでは、次の出力が表示されました。
PCに2つのDocker画像があります。最初のものを実行したいとしましょう。
これにより、コンテナを最終的に制御できます。 これで、コンテナ内のすべてのタイプのシェル操作を実行できます。
ls
を実行するように、ファイルシステムのルートにあるすべてのフォルダを出力します。使用:
もう1つの方法は、危険はありますが、「attach」を使用することですが、 Ctrl< / kbd> + C< / kbd>セッションを終了するには、コンテナも停止します。 何が起こっているのかを確認したい場合は、「ドッカーログ-f」を使用してください。
このコマンドを使用します。
ファイルを検査するには、「ドッカーラン-it< image>」を実行します。 / bin / bash`でインタラクティブターミナルを取得します。 画像のリストは「ドッカー画像」で入手できます。 「ドッカーエグゼクティブ」とは異なり、このソリューションは、画像が起動しない(または実行直後に終了する)場合にも機能します。
docker exec`は間違いなく解決策になるでしょう。あなたの質問に対する簡単な方法は、Docker内のディレクトリをローカルシステムのディレクトリにマウントすることです。
そうすればローカルパスの変更を即座に見ることができます。
または、シェルによっては、そうすることができます。
container-Id は、
docker ps
コマンドで入手できます。-i
=インタラクティブ。-t
= psuedo-TTYを割り当てます。オプション-tiを渡すことで、ドッカーコンテナーでターミナルを操作できます。
-tはターミナルを表します。 -iはインタラクティブの略です。
「キテマティック」がインストールされているドッカーを使用している場合は、GUIを使用できます。ドッカーアイコンから「キテマティック」を開き、「キテマティック」ウィンドウでコンテナを選択し、「exec」アイコンをクリックします。
このGUIには、コンテナログとコンテナ情報の多く(設定タブ)も表示されます。
。![メニューからキテマティックを選択](https://i.stack.imgur.com/CIUnq.jpg。)。
。![exec](https://i.stack.imgur.com/GDdTz.jpg。)をクリックします。
コンテナのターミナルに簡単にアクセスできるようにターミナル機能を作成しました。 多分それはあなたたちにも役立ちます:
つまり、次のように入力する代わりに、結果が得られます。
あなたが書くでしょう:
〜/ .bash_profile(またはあなたのために働く他のもの)に以下を入れ、次に新しいターミナルウィンドウを開いてショートカットをお楽しみください: