创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
当前回答
首先获取容器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"
其他回答
for containerId in $(sudo docker ps -a | cut -f1 -d' ' | grep -v CONTAINER); do
echo " ContainerId - $containerId >> $(sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' $containerId) "
done
还没有人提出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 inspect<container id>。
例如:
CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
执行:
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"
我的多网络环境有问题,所以这是一个更动态的版本
获取驻留在一个合成文件中的所有主机名、网络和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