创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
创建新容器后,是否可以运行命令从主机获取容器的IP地址?
基本上,一旦Docker创建了容器,我就想滚动我自己的代码部署和容器配置脚本。
当前回答
显示所有容器的IP地址:
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
其他回答
我编写了以下Bash脚本,以从docker compose下运行的所有容器中获取IP地址表。
function docker_container_names() {
docker ps -a --format "{{.Names}}" | xargs
}
# Get the IP address of a particular container
dip() {
local network
network='YOUR-NETWORK-HERE'
docker inspect --format "{{ .NetworkSettings.Networks.$network.IPAddress }}" "$@"
}
dipall() {
for container_name in $(docker_container_names);
do
local container_ip=$(dip $container_name)
if [[ -n "$container_ip" ]]; then
echo $(dip $container_name) " $container_name"
fi
done | sort -t . -k 3,3n -k 4,4n
}
您应该将变量网络更改为自己的网络名称。
您可以使用docker inspect<container id>。
例如:
CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
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,请在大括号周围使用双引号“而不是单引号”。
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
Use:
docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1