LoginSignup
8
8

More than 5 years have passed since last update.

docker execをより使いやすいため便利なツールを作ってみた

Last updated at Posted at 2016-09-21

デバッグのため、Dockerホストにログインし、docker psで実行中のコンテナーを調べて、対象となるコンテナーのIDを取得し、最後にdocker exec -it $cid bashなどでコンテナーの中に入り、デバッグなどをします。

例えば(例1):

$ docker ps | grep post
d448ca916642        postgres            "/docker-entrypoint.s"   About an hour ago   Up About an hour    5432/tcp            cocky_kare

$ docker exec d448 hostname
d448ca916642

こんな頻繁な操作であれば、もっと簡単にすべきだと思って、便利なツールを作りました。

ソースは GitHub にあげています。

使い方法:

$ dexec search-string [arg1, arg2, arg3]

search-string は必須で、 arg1 などはコンテナーに実行するコマンド、もしコマンドを指定されていなければ、 bash が渡されます。

dexec を使えば、例1は下記のように一つのコマンドができます:

$ dexec post hostname

もし post に該当するコンテナーが多数があれば、どのコンテナーまたはすべてのコンテナーを選択することもできます。

例えば、すべての busybox コンテナーのIPを調べたいとしたら:

$ dexec busy ip addr show eth0
the is more than one containers found:

1 630f17f03600        busybox             "tail -f /dev/null"      About an hour ago   Up About an hour                        goofy_kilby
2 699872b3712c        busybox             "tail -f /dev/null"      About an hour ago   Up About an hour                        clever_euler


please select one [1-2](ENTER for run in all containers):
Running commands in conatiner 630f17f03600 
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.5/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:5/64 scope link 
       valid_lft forever preferred_lft forever
Running commands in conatiner 699872b3712c 
24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.4/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:4/64 scope link 
       valid_lft forever preferred_lft forever

上記のよう、 busybox のコンテナーが2つありまして、どのコンテナーに実行するか聞かれます。上からコンテナーの順番を指定すると、そのコンテナーにコマンドが実行されます。 何も指定しなくて Enter を押すと、すべてのコンテナーに実行されます。やめるには Ctrl+C でOKです。

下記のビデオもご覧ください。

asciicast

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8