docker inspect で動的に割り付けられたポートを取り出す
コンテナの80ポートを動的にマッピングした時にホストOSにマッピングされたポートをdocker inspectコマンドだけで取得しようと思いましたが、どう頑張ってもうまくいきません。
go langのテンプレートに詳しい方のアドバイスを頂ければと考えました。
下記は、試みたことです。
コンテナの80ポートを動的にホストOSのポートに割り付けます。
$ docker run -p 80 -d -it --name test ubuntu:18.04
$ docker ps | grep test
9dda4ab9febf ubuntu:18.04 "/bin/bash" 23 seconds ago Up 22 seconds 0.0.0.0:32770->80/tcp test
$
docker inspectでは、下記の通り、80/tcpが32770にマッピングされた情報が出力されています。
$ docker inspect test | jq '.[0].NetworkSettings.Ports'
{
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "32770"
}
]
}
下記で取得することはできるのですが、複数のポートが割り付けられた場合にコンテナの80ポートを指定したいと考えました。
$ docker inspect --format='{{range .NetworkSettings.Ports}}{{range .}}{{.HostPort}}{{end}}{{end}}' test
32770
$
"80/tcp"を指定すればよいかと考えましたが下記の通りだめでした。
$ docker inspect --format='{{range .NetworkSettings.Ports}}{{range .80/tcp}}{{.HostPort}}{{end}}{{end}}' test
Template parsing error: template: :1: unexpected "/" in operand
$
エスケープ文字の問題だとは思うのですが、"\"や"で囲ってもうまくいきませんでした。