使用Bash/Shell脚本获取Docker Swarm 服务和任务副本的IP地址以及宿主机的IP地址
问题描述
在日常运维中,你可能会遇到以下几个问题:
- 如何快速获取每个Docker服务的任务的IP地址?
- 如何获取任务所在宿主机的IP地址?
- 在微服务中通过链路追踪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
使用说明
- 将脚本保存为
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
-
赋予脚本执行权限:
chmod +x get_docker_info.sh
-
运行脚本:
./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管理工作更加高效和便捷。如果你有任何问题或建议,请随时留言。