创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
当前回答
如果您想快速查看所有Docker IP地址,或者不键入实例名称,可以破解Docker ps命令,将其添加到~/.bashrc文件中:
function docker-ips() {
docker ps | while read line; do
if `echo $line | grep -q 'CONTAINER ID'`; then
echo -e "IP ADDRESS\t$line"
else
CID=$(echo $line | awk '{print $1}');
IP=$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" $CID);
printf "${IP}\t${line}\n"
fi
done;
}
这来自Andrew Johnstone在Docker GitHub上的提议:https://github.com/docker/docker/issues/8786
其他回答
我必须通过docker容器名称提取docker容器IP地址,以便在部署脚本中进一步使用。为此,我编写了以下bash命令:
docker inspect $(sudo docker ps | grep my_container_name | head -c 12) | grep -e \"IPAddress\"\:[[:space:]]\"[0-2] | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
假设将其放置到bash脚本中会很方便,该脚本会期望my_container_name作为参数。。。
只需一个命令即可获取所有容器名称及其IP地址。
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
如果您使用docker compose,则命令如下:
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
输出将为:
/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2
Docker inspect用于打印所有容器ip及其各自的名称
docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'
在Windows PowerShell中尝试:
docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <container id>
没有人提及的最佳方法是为容器分配主机名。
docker run -d --hostname localcontainerhostname imageName
这将为您提供ip地址,但您可能还是希望使用主机名
nslookup localcontainerhostname