dockerコマンドにはinspectコマンドというのがあって、コンテナやイメージの様々な情報を取得できる。今回はこのコマンドについていろいろ触ったので、メモを書いておく。
簡単な使い方
基本的には
$ docker inspect (コンテナID)
と使う
$ docker inspect 2a5624c52119 [{ "ID": "2a5624c5211981af1ddc1b43916176778f92665ec13f64346456ab24ddfef9b2", "Created": "2013-12-28T05:03:32.821608786Z", "Path": "/bin/sh", "Args": [ "-c", "while true; do echo hello world; sleep 1; done" ], "Config": { "Hostname": "2a5624c52119", # ...
format
さらに-formatでformat指定して取得もできる。あるコンテナのIPを取得してみる。
$ docker inspect -format="{{ .NetworkSettings.IPAddress }}" 2a5624c52119 172.17.0.24
このformatはtemplate package - text/template - pkg.go.devの構文が使えるみたい。
いろいろやってみた
いろいろ構文あったので、試しにやってみた。
IPアドレス取得
変数には.を使ってアクセスできるっぽい。上にも書いたけどもう一回。
$ docker inspect -format="{{ .NetworkSettings.IPAddress }}" 2a5624c52119 172.17.0.24
あるコンテナに設定されている環境変数取得
range使えばfor文みたいなのできる。
$ docker inspect -format='{{range .Config.Env}}{{println .}}{{end}}' c3fa3ce1622b HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
22番portの空いているコンテナのforwardingされたport一覧取得
とたんに難しくなりますが、現在立ち上がっているコンテナの中で22番portが空いている場合の、port forwarding先port番号の表示です。
$ docker ps -q | xargs docker inspect -format='{{ if index .NetworkSettings.Ports "22/tcp" }}{{(index (index .NetworkSettings.Ports "22/tcp") 0).HostPort}}{{ end }}' | sed '/^$/d' 49156 49155 49154 49153
まとめ
とりあえずdocker inspectを使って色々やってみました。これを使うとコンテナを立ちあげて、その情報を取得して、それに対して何かを実行するというのをシェルスクリプトでも結構簡単に出来ます。とはいえsyntaxが結構難しいので、やり過ぎ注意というイメージを受けました。