かべぎわブログ

技術的なことについてかけたらいいな…

docker attachとdocker execで現在稼働中のコンテナに接続する

概要

docker attachコマンドを利用して現在稼働中のコンテナに接続してみたいと思います。

docker attach

たとえば以下のようにping localhostを実行し続けているコマンドがあるとする。

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
90cc08eedba3        centos              "ping localhost"    4 minutes ago       Up 2 seconds                            affectionate_ardinghelli

そこにdocker attachをつかって接続してみる。

$ sudo docker attach 90cc08eedba3

4 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=255 time=0.029 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=255 time=0.036 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=255 time=0.034 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=255 time=0.036 ms

pingの出力が標準出力にでてきました。
コンテナの中に入ることができました。

docker exec

docker execコマンドでは現在稼働中のコンテナで新たにプロセスを実行することができます。
/bin/bashをこのコマンドで新たに実行させてあげればコンテナのなかにシェルを立ち上げて入ることが可能です。

たとえば以下のようにping localhostを実行し続けているコマンドがあるとする。

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
90cc08eedba3        centos              "ping localhost"    4 minutes ago       Up 2 seconds                            affectionate_ardinghelli

docker attachではコンテナの中にはいってもpingの実行結果が出力されるだけだったが、今回はシェルの中に入ってみる。

$ sudo docker exec -it 90cc08eedba3 /bin/bash

コンテナの中に入ってps -aでプロセスの状態をみるとping localhostが実行されていることがわかります。

# ps -ef | grep ping
root         1     0  0 14:12 ?        00:00:00 ping localhost
root        19     5  0 14:12 pts/0    00:00:00 grep --color=auto ping

おわりに

コンテナの中にはいることができた。

Docker

Docker