[Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法

本文由Markdown语法编辑器编辑完成。

1. 需求背景:

最近在启动一个服务时,突然发现它的一个接口,被另一个服务ip频繁的请求。

按理说,之前设置的是,每隔1分钟请求一次接口。但从日志来看,则是1秒钟请求一次,明显是不太正常的。

但是,我需要定位一下,这个ip对应的是哪个服务,因为有可能有多个服务,来请求这个接口。

因此,需求的背景就是,如何根据docker服务日志中展示的ip, 快速地查找出,它是docker-compose.yml中的哪个服务。

2. 解决方案:

2.1 docker inspect

如果一个docker-compose.yml里面的服务数量比较少,我们是可以通过 docker inspect的指令,来查看某个服务被分配的ip地址是多少的。

这里举一个简单的例子,假设我有一个容器的名称, container-abc, 那么我如果想知道它在启动状态下分配的ipv4的地址,可以输入以下指令:

shell 复制代码
docker inspect {your-container-name} |grep -i ip

这样就可以查看到这个容器对应的服务的ip地址了。

如下示例:

可以看到,在截图中,

serverIP, 是宿主机的ip地址;

而IPAddress, 就是这个容器,在docker内部的ip地址。

docker-compose.yml中的服务之间,相互调用接口,就是通过这个ip来访问的。

2.2 组合docker的指令

第一种方法,仅限于当docker里面的服务数量较少时,可以使用。但是如果服务较多,肯定不是很现实。于是咨询了一下豆包,她给出了我一些建议。

通过将豆包给出的shell脚本,创建一个shell文件,比如:

shell 复制代码
touch docker-ip.sh
vim docker-ip.sh
powershell 复制代码
# 获取容器 ID 列表
container_ids=$(docker-compose ps -q)

# 循环处理每个容器 ID
for container_id in $container_ids; do
    # 获取容器对应的服务名(通过解析容器名称来获取,容器名称包含服务名相关信息)
    service_name=$(docker inspect --format='{{.Name}}' $container_id | sed 's/^\///')
    # 获取容器的 IP 地址
    ip_address=$(docker inspect --format='{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $container_id)
    echo "服务名: $service_name,IP 地址: $ip_address"
done

将上述脚本写入 docker-ip.sh文件后,再次运行:

shell 复制代码
bash docker-ip.sh

就可以看到如下面的截图了,这里会显示每个服务对应的容器的名称,以及容器被分配的ip地址。

(完)

相关推荐
周小码11 小时前
Go开发的自行托管代理加速服务:支持Docker与GitHub加速
docker·golang·github
川石课堂软件测试12 小时前
Oracle 数据库使用事务确保数据的安全
数据库·python·功能测试·docker·oracle·单元测试·prometheus
奋斗的老史12 小时前
25年Docker镜像无法下载的四种对策
docker·容器·eureka
小马爱打代码12 小时前
Spring Cloud Eureka 核心原理
spring cloud·eureka
chillxiaohan12 小时前
Docker学习记录
学习·docker·容器
柯南二号13 小时前
【后端】Docker 常用命令详解
服务器·nginx·docker·容器
Linux运维技术栈14 小时前
Cloudflare安全规则实用指南:从路径拦截到IP限制的10个经典范例
网络·tcp/ip·安全
我今天指定是不行了15 小时前
Docker安装与部分应用安装
docker
streaker30315 小时前
Docker + Jenkins + Nginx 实现前端自动化构建与静态资源发布(含一键初始化脚本)
docker·jenkins
THMAIL16 小时前
机器学习从入门到精通 - Python环境搭建与Jupyter魔法:机器学习起航必备
linux·人工智能·python·算法·机器学习·docker·逻辑回归