1. ホーム
  2. docker

[解決済み] Dockerコンテナのシェルに入るにはどうしたらいいですか?

2022-03-17 14:20:18

質問

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

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

どのように解決するのですか?

docker attach は Docker コンテナに接続できるようにしますが、これは実際には ssh . 例えば、コンテナがウェブサーバーを動かしている場合。 docker attach に接続することになるでしょう。 標準出力 を使用することで、ウェブサーバプロセスの 必ずしもシェルを使えるようになるとは限りません。

は、その docker exec コマンドは、おそらくあなたが探しているものでしょう。このコマンドは、既存のコンテナの中で任意のコマンドを実行することができます。 例えば

docker exec -it <mycontainer> bash

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

上記のコマンドでは <mycontainer> はターゲット・コンテナの名前またはIDです。 を使用しているかどうかは関係ありません。 docker compose を実行するだけです。 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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,UP,LOWER_UP> 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
$