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

Dockerを使い始めました。WordPressのベースイメージとdocker-composeを使っています。

最初のビルドで作成されたファイルやディレクトリを調べるために、コンテナの1つにsshで入ろうとしています。docker-compose run containername ls -la` を実行しようとしましたが、何もできませんでした。たとえ実行できたとしても、1つのコマンドを実行するよりも、ディレクトリ構造をたどることができるコンソールが欲しいです。Dockerでこれを行う正しい方法は何でしょうか?

質問へのコメント (3)
ソリューション

docker attachを使うと Docker コンテナに接続できるが、これはsshとは違う。 例えばコンテナがウェブサーバを実行している場合、docker attach` はおそらくウェブサーバプロセスの stdout に接続するだろう。 これは必ずしもシェルを提供するわけではない。

これは既存のコンテナ内で任意のコマンドを実行できる。 例えば

docker exec -it  bash

もちろん、実行するコマンドはコンテナのファイルシステムに存在する必要があります。

上記のコマンドでは、`が対象のコンテナの名前またはIDです。 docker psを実行し、ID(最初の列に表示される16進数の文字列)または名前(最後の列に表示される)のどちらかを使用するだけです。 例えば

$ docker ps
d2d4a89aaee9        larsks/mini-httpd   "mini_httpd -d /cont   7 days ago          Up 7 days                               web                 

と実行できます:

$ docker exec -it web ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
18: eth0:  mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:3/64 scope link 
       valid_lft forever preferred_lft forever

を実行しても同じことができる:

$ docker exec -it d2d4a89aaee9 ip addr

同様に、コンテナ内でシェルを起動することもできる;

$ docker exec -it web sh
/ # echo This is inside the container.
This is inside the container.
/ # exit
$
解説 (8)

実行中のコンテナに打ち込むには、次のように入力します。

docker exec -t -i container_name /bin/bash
解説 (6)

たとえば、あなた自身の理由で、本当にSSHを使用したいとします。いくつかの手順が必要ですが、実行できます。 コンテナー内で実行してセットアップするコマンドは次のとおりです。..

apt-get update
apt-get install openssh-server

mkdir /var/run/sshd
chmod 0755 /var/run/sshd
/usr/sbin/sshd

useradd --create-home --shell /bin/bash --groups sudo username ## includes 'sudo'
passwd username ## Enter a password

apt-get install x11-apps ## X11 demo applications (optional)
ifconfig | awk '/inet addr/{print substr($2,6)}' ## Display IP address (optional)

これで、SSHクライアントへのX11転送を使用して、グラフィカルアプリケーション(コンテナーにインストールされている場合)を実行することもできます。

ssh -X username@IPADDRESS
xeyes ## run an X11 demo app in the client

関連するリソースをいくつか示します。

解説 (0)

通知:この答えは、私が書いたツールを宣伝します。

実行中のコンテナに「貼り付け」できるコンテナ化SSHサーバーを作成しました。 このようにして、すべてのコンテナでコンポジションを作成できます。 唯一の要件は、コンテナにBashがあることです。

次の例では、「my-container」という名前のコンテナに接続されたSSHサーバーが起動します。

docker run -d -p 2222:22 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \
  jeroenpeeters/docker-ssh

ssh localhost -p 2222

このSSHサービスに接続すると(SSHクライアントが選択して)、「my-container」という名前のコンテナでBashセッションが開始されます。

その他のポインタとドキュメントについては、https://github.com/jeroenpeeters/docker-sshを参照してください

解説 (2)

私のようにDocker Compose固有の回答を探している場合は、生成されたコンテナIDを検索する必要なく、簡単にアクセスできます。

docker-compose execは、 docker-compose.ymlファイルに従ってサービスの名前を取ります。

したがって、「Web」サービスのBashシェルを取得するには、次のことができます。

$ docker-compose exec web bash
解説 (0)

WindowsでDockerを使用していて、コンテナへのシェルアクセスを取得する場合は、次の項目を使用します。

winpty docker exec -it  sh

ほとんどの場合、Git Bashがインストールされています。 そうでない場合は、必ずインストールしてください。

解説 (1)

このコマンドを使用してドッカーコンテナにSSH:

sudo docker exec -i -t (container ID) bash
解説 (0)

場合によっては、画像がアルパインベースになることがあります。 この場合、次のようにスローされます。

OCIランタイムexecが失敗しました:execが失敗しました:container_linux.go:348:開始。 コンテナプロセスにより、「exec:\ "bash \"」が発生しました。実行可能ファイルが見つかりません。 $ PATH ":不明。

/ bin / bashが存在しないためです。 これの代わりに、以下を使用する必要があります。

docker exec -it 9f7d99aa6625 ash

または。

docker exec -it 9f7d99aa6625 sh
解説 (0)

コンテナがすでに終了している場合(エラーが原因である可能性があります)、実行できます。

$ docker run --rm -it --entrypoint /bin/ash image_name

または。

$ docker run --rm -it --entrypoint /bin/sh image_name

または。

$ docker run --rm -it --entrypoint /bin/bash image_name

新しいコンテナを作成し、シェルを取り込みます。 --rmを指定したため、シェルを終了するとコンテナが削除されます。

解説 (0)

Windowsコンテナでcmdに接続するには、を使用します。

docker exec -it d8c25fde2769 cmd

ここで、 d8c25fde2769 はコンテナIDです。

解説 (0)
< h1> GOINSIDE SOLUTION< / h1>。

goinsideコマンドラインツールを次のようにインストールします。

sudo npm install -g goinside

次の適切なターミナルサイズのドッカーコンテナー内に入ります。

goinside docker_container_name

____。

< h2> old answ< / h2>。

このスニペットを 〜/ .profileに入れました。

goinside(){
    docker exec -it $1 bash -c "stty cols $COLUMNS rows $LINES && bash";
}
export -f goinside

これにより、誰もが次の状態で実行中のコンテナに入ることができます。

goinside containername

また、長寿命固定ドッカーコンテナターミナルサイズに関する問題も解決します。 あなたがそれに直面した場合、それは非常に迷惑です。

また、リンクをフォローすると、ドッカーコンテナー名もコマンドで完了します。

解説 (1)

簡単です。!

Dockerのすべての画像をリストします。

sudo docker images

私のシステムでは、次の出力が表示されました。

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
bash                latest              922b9cc3ea5e        9 hours ago
14.03 MB
ubuntu              latest              7feff7652c69        5 weeks ago         81.15 MB

PCに2つのDocker画像があります。最初のものを実行したいとしましょう。

sudo docker run -i -t ubuntu:latest /bin/bash

これにより、コンテナを最終的に制御できます。 これで、コンテナ内のすべてのタイプのシェル操作を実行できます。 lsを実行するように、ファイルシステムのルートにあるすべてのフォルダを出力します。

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
解説 (0)

使用:

docker attach 

もう1つの方法は、危険はありますが、「attach」を使用することですが、 Ctrl< / kbd> + C< / kbd>セッションを終了するには、コンテナも停止します。 何が起こっているのかを確認したい場合は、「ドッカーログ-f」を使用してください。

:~$ docker attach --help
Usage:  docker attach [OPTIONS] CONTAINER

Attach to a running container

Options:
      --detach-keys string   Override the key sequence for detaching a container
      --help                 Print usage
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the process (default true)
解説 (0)

このコマンドを使用します。

docker exec -it containerid /bin/bash
解説 (0)

ファイルを検査するには、「ドッカーラン-it< image>」を実行します。 / bin / bash`でインタラクティブターミナルを取得します。 画像のリストは「ドッカー画像」で入手できます。 「ドッカーエグゼクティブ」とは異なり、このソリューションは、画像が起動しない(または実行直後に終了する)場合にも機能します。

解説 (1)

docker exec`は間違いなく解決策になるでしょう。あなたの質問に対する簡単な方法は、Docker内のディレクトリをローカルシステムのディレクトリにマウントすることです。

そうすればローカルパスの変更を即座に見ることができます。


docker run -v /Users/<path>:/
解説 (2)
$ docker exec -it  /bin/bash

または、シェルによっては、そうすることができます。

$ docker exec -it  /bin/sh

container-Id は、 docker psコマンドで入手できます。

-i =インタラクティブ。

-t = psuedo-TTYを割り当てます。

解説 (0)

オプション-tiを渡すことで、ドッカーコンテナーでターミナルを操作できます。

docker run --rm -ti 
eg: docker run --rm -ti ubuntu

-tはターミナルを表します。 -iはインタラクティブの略です。

解説 (0)

「キテマティック」がインストールされているドッカーを使用している場合は、GUIを使用できます。ドッカーアイコンから「キテマティック」を開き、「キテマティック」ウィンドウでコンテナを選択し、「exec」アイコンをクリックします。

このGUIには、コンテナログとコンテナ情報の多く(設定タブ)も表示されます。

。![メニューからキテマティックを選択](https://i.stack.imgur.com/CIUnq.jpg。)

。![exec](https://i.stack.imgur.com/GDdTz.jpg。)をクリックします。

解説 (0)

コンテナのターミナルに簡単にアクセスできるようにターミナル機能を作成しました。 多分それはあなたたちにも役立ちます:

つまり、次のように入力する代わりに、結果が得られます。

docker exec -it [container_id] /bin/bash

あなたが書くでしょう:

dbash [container_id]

〜/ .bash_profile(またはあなたのために働く他のもの)に以下を入れ、次に新しいターミナルウィンドウを開いてショートカットをお楽しみください:

#usage: dbash [container_id]
dbash() {
    docker exec -it "$1" /bin/bash
}
解説 (0)