创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
当前回答
这将列出主机上的所有容器IP:
sudo docker ps -aq | while read line; do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done
其他回答
只是另一个经典的解决方案:
docker ps -aq | xargs docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}'
docker inspect CONTAINER_ID | grep "IPAddress"
您可以将-i添加到grep中以忽略该情况,那么即使以下操作也会奏效:
docker inspect CONTAINER_ID | grep -i "IPaDDreSS"
我的多网络环境有问题,所以这是一个更动态的版本
获取驻留在一个合成文件中的所有主机名、网络和IP
for N in $(docker-compose ps -q) ; do echo "$(docker inspect -f '{{.Config.Hostname}}' ${N}) $(docker inspect -f '{{range $i, $value := .NetworkSettings.Networks}} [{{$i}}:{{.IPAddress}}]{{end}}' ${N})"; done
输出
containerA [networkA:192.168.1.4] [networkB:192.168.2.4]
containerB [networkA:192.168.1.5]
要获取所有正在运行的容器,请替换第一个命令
for N in $(docker-compose ps -q)
with
for N in $(docker container ls | awk 'NR>=2' | cut -c1-12 );
获取给定1个特定网络的1个特定容器(具有多个网络)的IP
docker inspect --format='{{range $i, $value := .NetworkSettings.Networks}}{{if eq $i "NETWORKNAME"}}{{.IPAddress}}{{end}}{{end}}' CONTAINERNAME
输出
192.168.1.4
获取给定1个特定网络的所有容器(具有多个网络)的“主机名IP”
for N in $(docker-compose ps -q) ; do echo "$(docker inspect -f '{{.Config.Hostname}}' ${N}) $(docker inspect -f '{{range $i, $value := .NetworkSettings.Networks}}{{if eq $i "intranet"}}{{.IPAddress}}{{end}}{{end}}' ${N})"; done
输出
containerA 192.168.1.4
containerB 192.168.1.5
获取给定1个特定网络的所有容器(具有多个网络)的IP
for N in $(docker-compose ps -q) ; do echo " $(docker inspect -f '{{range $i, $value := .NetworkSettings.Networks}}{{if eq $i "intranet"}}{{.IPAddress}}{{end}}{{end}}' ${N})"; done
输出
192.168.1.4
192.168.1.5
inspect的--format选项起了作用。
现代Docker客户端语法为:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
旧Docker客户端语法为:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
这些命令将返回Docker容器的IP地址。
如评论中所述:如果您使用Windows,请在大括号周围使用双引号“而不是单引号”。
对于Windows容器,请使用
docker exec <container> ipconfig
其中<container>是容器的名称或id。
您可以使用docker ps来查找容器的id。