从主机获取Docker容器IP地址的四种方法

 更新时间:2025年06月23日 11:14:47   作者:1010n111  
在使用Docker进行开发和部署时,经常需要从主机获取容器的IP地址,以进行代码部署、容器配置或与容器进行通信等操作,本文介绍多种从主机获取Docker容器IP地址的方法,需要的朋友可以参考下

从主机获取Docker容器IP地址的方法

实现步骤

方法一:使用docker inspect命令结合格式化选项

现代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上使用,需将单引号'替换为双引号"

方法二:通过docker ps和docker inspect命令手动查找

1. 首先获取容器ID:

docker ps

(第一列是容器ID)

2. 使用容器ID运行:

docker inspect <container ID>

在输出的底部,NetworkSettings下可以找到IPAddress

或者在UNIX系统上使用:

docker inspect <container id> | grep "IPAddress"

在Windows CMD中使用:

docker inspect <container id> | findstr "IPAddress"

方法三:使用脚本获取所有容器的IP地址

docker inspect -f '{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

如果使用docker-compose,命令如下:

docker inspect -f '{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

方法四:通过docker exec命令在容器内查询

在Linux容器中:

docker exec [container-id or container-name] cat /etc/hosts

在Windows容器中:

docker exec [container-id or container-name] ipconfig

核心代码

以下是一个Python脚本示例,用于获取容器的网络信息:

#!/usr/bin/python

import json
import subprocess
import sys

try:
    CONTAINER = sys.argv[1]
except Exception as e:
    print "\n\tSpecify the container name, please."
    print "\t\tEx.:  script.py my_container\n"
    sys.exit(1)

# Inspecting container via Subprocess
proc = subprocess.Popen(["docker","inspect",CONTAINER],
                      stdout=subprocess.PIPE,
                      stderr=subprocess.STDOUT)

out = proc.stdout.read()
json_data = json.loads(out)[0]

net_dict = {}
for network in json_data["NetworkSettings"]["Networks"].keys():
    net_dict['mac_addr']  = json_data["NetworkSettings"]["Networks"][network]["MacAddress"]
    net_dict['ipv4_addr'] = json_data["NetworkSettings"]["Networks"][network]["IPAddress"]
    net_dict['ipv4_net']  = json_data["NetworkSettings"]["Networks"][network]["IPPrefixLen"]
    net_dict['ipv4_gtw']  = json_data["NetworkSettings"]["Networks"][network]["Gateway"]
    net_dict['ipv6_addr'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6Address"]
    net_dict['ipv6_net']  = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6PrefixLen"]
    net_dict['ipv6_gtw']  = json_data["NetworkSettings"]["Networks"][network]["IPv6Gateway"]
    for item in net_dict:
        if net_dict[item] == "" or net_dict[item] == 0:
            net_dict[item] = "null"
    print "\n[%s]" % network
    print "\n{}{:>13} {:>14}".format(net_dict['mac_addr'],"IP/NETWORK","GATEWAY")
    print "--------------------------------------------"
    print "IPv4 settings:{:>16}/{:<5}  {}".format(net_dict['ipv4_addr'],net_dict['ipv4_net'],net_dict['ipv4_gtw'])
    print "IPv6 settings:{:>16}/{:<5}  {}".format(net_dict['ipv6_addr'],net_dict['ipv6_net'],net_dict['ipv6_gtw'])

最佳实践

  • 使用格式化选项:使用docker inspect--format选项可以直接获取所需的IP地址,避免手动解析大量输出。
  • 脚本化操作:将常用的命令封装成脚本或别名,提高操作效率。例如,在~/.bashrc中添加以下脚本:
docker-ip() {
  docker inspect --format '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}

然后,要获取容器的IP地址,只需执行:

docker-ip YOUR_CONTAINER_ID

常见问题

  • docker inspect返回<no value>:可能是容器未正确分配IP地址,或者使用的网络配置有问题。检查容器是否正常运行,以及网络设置是否正确。
  • 在Windows上使用单引号导致错误:Windows系统需要使用双引号"替换单引号'
  • 容器连接多个网络时获取IP问题:使用docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'可能会返回多个IP地址。可以使用jq工具来解析网络JSON,以更好地处理这种情况。

以上就是从主机获取Docker容器IP地址的四种方法的详细内容,更多关于主机获取Docker IP地址的资料请关注脚本之家其它相关文章!

相关文章

  • Docker设置获取环境变量的方法实现

    Docker设置获取环境变量的方法实现

    本文主要介绍了Docker设置获取环境变量的方法实现,包含设置环境变量到使用获取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • Docker构建镜像的两种方式实现

    Docker构建镜像的两种方式实现

    从 docker 镜像仓库中下载的镜像不能满足我们的需求时,可以通过以下两种方式对镜像进行更改。本文就详细的介绍了这两种方法,感兴趣的可以了解一下
    2021-09-09
  • 基于CentOS8系统使用Docker搭建Gitlab的详细教程

    基于CentOS8系统使用Docker搭建Gitlab的详细教程

    这篇文章主要介绍了基于CentOS8系统使用Docker搭建Gitlab教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Docker 使用 Supervisor 来管理进程操作

    Docker 使用 Supervisor 来管理进程操作

    这篇文章主要介绍了Docker 使用 Supervisor 来管理进程操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker跨平台和环境部署的过程详解

    Docker跨平台和环境部署的过程详解

    Docker是一个开放源代码的容器化平台,它能够实现应用及其依赖的打包,从而实现跨平台和环境的快速部署,本文介绍了Docker的基本概念、优势和基本使用方法,包括安装、启动、构建镜像和部署应用等步骤
    2024-11-11
  • 如何删除docker-register镜像及none无效镜像详解

    如何删除docker-register镜像及none无效镜像详解

    这篇文章主要给大家介绍了关于如何删除docker-register镜像及none无效镜像的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • docker将本地镜像发布到阿里云的实现方法

    docker将本地镜像发布到阿里云的实现方法

    本文主要介绍了docker将本地镜像发布到阿里云的实现方法,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 使用docker打包项目的完整流程记录(小白可懂)

    使用docker打包项目的完整流程记录(小白可懂)

    这篇文章主要介绍了使用docker打包项目的完整流程,并详细解释了Dockerfile、构建镜像和创建容器的步骤,通过实战项目大家可以掌握基本的Docker打包流程,需要的朋友可以参考下
    2025-04-04
  • docker删除拉取的镜像释放内存的操作方法

    docker删除拉取的镜像释放内存的操作方法

    kali内存满了,释放一下内存,通过查看本地镜像,删除本地镜像,文中给大家介绍了docker image ls详解,对docker删除拉取的镜像释放内存相关知识操作感兴趣的朋友一起看看吧
    2023-01-01
  • docker实现资源清理方式

    docker实现资源清理方式

    这篇文章主要介绍了docker实现资源清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论