docker - 如何查看 docker 网络中的所有域
问题描述
我在装满容器的 docker 中有一个网络。有些是未命名的,可以通过ip找到。其他的被命名并且可以通过 dns 查找来访问。
如何查看 docker 网络中的所有可解析域?如果无法查看全部,如何查看到达某个容器的所有域?
解决方案
In a default bridge network containers can access each other by IP. In a user-defined bridge network they can also use names and aliases. Additionally you can specify a network explicitly (name-or-alias
-> name-or-alias.network
).
To list aliases in a network:
for c in `docker ps -q`; do \
docker inspect "$c" \
-f $'{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{.Aliases}}\n{{end}}'; \
done | awk '$1 == "<network>"'
Output:
<network> [<alias1> <alias2>...]
...
E.g.:
prj_default [app 59bb8a265b9b]
...
To list container names and aliases across all networks:
for c in `docker ps -q`; do \
echo -n "`docker inspect "$c" -f '{{.Name}}'` ($c): "; \
docker inspect "$c" \
-f '{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{.Aliases}} {{end}}'; \
done
Output:
/<container_name> (<container_id>): <network1> [<alias1> <alias2>...] <network2> [<alias1> <alias2>...]...
...
E.g.:
/prj_app_1 (59bb8a265b9b): prj_default [app 59bb8a265b9b]
...
To check what a domain resolves to in a container:
$ getent hosts app
192.168.224.5 app app
To list name and aliases of a specific container:
docker inspect 59bb8a265b9b \
-f '{{.Name}} {{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{.Aliases}} {{end}}'
More on it here.