创建新容器后,是否可以运行命令从主机获取容器的IP地址?

基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。


当前回答

如果您需要一个特定的方便别名来获取特定的容器ip,请使用此别名,并提供公认的答案

alias dockerip='f(){ docker inspect $1|grep -i "ipaddress.*[12]*\.[0-9]*"|sed -e "s/^  *//g" -e "s/[\",]//g" -e "s/[*,]//g" -e "s/[a-zA-Z: ]//g" | sort --unique;  unset -f f; }; f'

然后你可以用

dockerip <containername>  

您也可以使用contained而不是containername

BTW接受了很好的答案,但没有产生干净的输出,所以我编辑了它,并这样使用;

alias dockerips='for NAME in $(docker ps --format {{.Names}}); do echo -n "$NAME:"; docker inspect $NAME|grep -i "ipaddress.*[12]*\.[0-9]*"|sed -e "s/^  *//g" -e "s/[\",]//g" -e "s/[_=*,]//g" -e "s/[a-zA-Z: ]//g "| sort --unique;done'

其他回答

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,请在大括号周围使用双引号“而不是单引号”。

首先获取容器ID:

docker ps

(第一列用于容器ID)

使用容器ID运行:

docker inspect <container ID>

在底部的“网络设置”下,您可以找到IPAddress

或者只针对基于UNIX的系统:

docker inspect <container id> | grep "IPAddress"

对于Windows CMD:

docker inspect <container id> | findstr "IPAddress"

执行:

docker ps -a

这将显示活动的docker图像:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
3b733ae18c1c        parzee/database     "/usr/lib/postgresql/"   6 minutes ago       Up 6 minutes                 5432/tcp            serene_babbage

使用CONTAINER ID值:

docker inspect <CONTAINER ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1

"172.17.0.2"

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

如果将容器部署到默认网桥网络,则上述方法有效。

然而,如果使用自定义网桥网络或覆盖网络,我发现以下方法效果更好:

docker exec <containername or containerID here> /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'

您可以使用docker inspect<container id>。

例如:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID