创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
当前回答
还没有人提出Docker Python API。Docker API获取IP地址的解决方案相当简单。
*基于NIX的操作系统:dockerapi3.7(由于canadadry的评论而更新)
import docker
client = docker.DockerClient(base_url='unix://var/run/docker.sock')
x_container = client.containers(filters={"name":"x_container"})[0]
x_ip_addr = x_container["NetworkSettings"]["Networks"]["NETWORK_NAME"]["IPAddress"]
OS不可知:dockerapi4.0.x(由于评论中的pds而添加)
import docker
client = docker.from_env()
container = client.containers.get(container_name)
vars( container )["attrs"]["NetworkSettings"]["Networks"]["<NETWORK_NAME>"]["IPAddress"]
不太难找到,但很有用。此外,这可以很容易地修改,以查找分配给各种网络上的容器的所有IP。
其他回答
我用这个简单的方法
docker exec -it <container id or name> hostname -i
e.g
ubuntu@myhost:~$ docker exec -it 3d618ac670fe hostname -i
10.0.1.5
这将列出主机上的所有容器IP:
sudo docker ps -aq | while read line; do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done
如果您需要一个特定的方便别名来获取特定的容器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'
有多种方法可以从主机获取容器的IP
docker inspect-f“{{range.NetworkSettings.Networks}}{{.IPAddress}}}{{end}”containerID
如果您记不住上面的命令,您可以始终执行以下操作
码头工人检查集装箱ID
它将在返回信息后返回Docker对象的低级信息。查找“网络”,然后在其中找到容器的“IPAddress”
为了扩展ko-dos的答案,这里有一个别名来列出所有容器名称及其IP地址:
alias docker-ips='docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect $name | grep IPAddress | cut -d \" -f 4; done'