使用Bash/Shell脚本获取Docker Swarm 服务和任务副本的IP地址以及宿主机的IP地址

使用Bash/Shell脚本获取Docker Swarm 服务和任务副本的IP地址以及宿主机的IP地址

问题描述

在日常运维中,你可能会遇到以下几个问题:

  1. 如何快速获取每个Docker服务的任务的IP地址?
  2. 如何获取任务所在宿主机的IP地址?
  3. 在微服务中通过链路追踪skywalking找到问题,无法定位每个服务具体在哪里。

解决方案:Bash脚本

设计了一个Bash脚本,能够自动化完成上述任务。该脚本通过调用Docker命令,获取每个服务的任务ID和IP地址,同时也获取了任务所在宿主机的IP地址,并以表格形式输出结果。

脚本功能
  • 获取所有Docker服务名称
  • 获取每个服务的所有任务ID和任务所在节点ID
  • 获取每个任务的IP地址
  • 获取任务所在宿主机的IP地址
  • 以表格形式输出服务名称、任务ID、任务IP地址和宿主机IP地址
脚本代码

以下是完整的Bash脚本代码:

#!/bin/bash

# 打印表头
printf "%-30s %-20s %-20s %-20s %-20s\n" "Service" "Task ID" "Container ID" "Task IP" "Node IP"

# 获取所有服务名称
docker service ls --format '{{.Name}}' | while read -r service; do
  # 获取每个服务的所有任务
  docker service ps --format "{{.ID}} {{.Node}} {{.Name}}" "$service" | while read -r task_id node_id task_name; do
    # 获取任务IP地址和容器ID
    task_info=$(docker inspect --format "{{range .NetworksAttachments}}{{.Addresses}}{{end}} {{.Status.ContainerStatus.ContainerID}}" "$task_id")
    task_ip=$(echo "$task_info" | awk '{print $1}')
    container_id=$(echo "$task_info" | awk '{print $2}' | cut -c 1-6)

    # 获取节点IP地址
    node_ip=$(docker node inspect --format '{{.Status.Addr}}' "$node_id")

    # 打印服务名称、任务ID、容器ID、任务IP、节点IP
    printf "%-30s %-20s %-20s %-20s %-20s\n" "$task_name" "$task_id" "$container_id" "$task_ip" "$node_ip"
  done
done

使用说明

  1. 将脚本保存为 get_docker_info.sh 文件:
 cat << 'EOF' > get_docker_info.sh
 #!/bin/bash
 
 # 打印表头
 printf "%-30s %-20s %-20s %-20s %-20s\n" "Service" "Task ID" "Container ID" "Task IP" "Node IP"
 
 # 获取所有服务名称
 docker service ls --format '{{.Name}}' | while read -r service; do
   # 获取每个服务的所有任务
   docker service ps --format "{{.ID}} {{.Node}} {{.Name}}" "$service" | while read -r task_id node_id task_name; do
     # 获取任务IP地址和容器ID
     task_info=$(docker inspect --format "{{range .NetworksAttachments}}{{.Addresses}}{{end}} {{.Status.ContainerStatus.ContainerID}}" "$task_id")
     task_ip=$(echo "$task_info" | awk '{print $1}')
     container_id=$(echo "$task_info" | awk '{print $2}' | cut -c 1-6)
 
     # 获取节点IP地址
     node_ip=$(docker node inspect --format '{{.Status.Addr}}' "$node_id")
 
     # 打印服务名称、任务ID、容器ID、任务IP、节点IP
     printf "%-30s %-20s %-20s %-20s %-20s\n" "$task_name" "$task_id" "$container_id" "$task_ip" "$node_ip"
   done
 done
 EOF
  1. 赋予脚本执行权限:

    chmod +x get_docker_info.sh
    
  2. 运行脚本:

    ./get_docker_info.sh
    

输出示例

脚本运行后,将输出如下格式的表格:

Service              Task ID           Container ID             Task IP                          Node IP            
service1             abc123            eee123                     10.0.0.1/24                    192.168.1.1        
service2             def456            ddd456                     10.0.0.2/24                    192.168.1.2        
...

总结

通过这个Bash脚本,你可以轻松地获取和管理Docker服务及其任务的IP地址信息,并且能够快速查找任务所在宿主机的IP地址。这一自动化解决方案能够显著提高工作效率,减少手动操作的错误风险。

相关关键词

  • Docker服务IP地址
  • Docker任务IP地址
  • Docker自动化脚本
  • 获取Docker节点IP
  • Docker运维管理
  • Bash脚本教程
  • 容器IP地址管理

希望这个脚本能够帮助到你,使你的Docker管理工作更加高效和便捷。如果你有任何问题或建议,请随时留言。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值