根据条件,获取docker容器名称

根据进程ID,获取docker容器名称(推荐)

复制代码
#!/bin/bash

# 接收进程ID作为输入参数
process_id="$1"

# 获取容器ID
container_id=$(cat /proc/"$process_id"/cgroup | tail -1)
container_id=${container_id##*/}

# 检查是否成功获取容器ID
if [[ -n "$container_id" ]]; then
  # 获取容器名称
  container_name=$(docker inspect --format "{{.Name}}" "$container_id")

  # 移除容器名称前面的斜杠
  container_name=${container_name:1}

  # 输出容器ID和容器名称
  echo "进程ID $process_id 对应的容器ID为: $container_id"
  echo "容器ID $container_id 对应的容器名称为: $container_name"
else
  # 如果没有找到匹配的容器ID,则输出相应信息
  echo "未找到进程ID $process_id 对应的容器"
fi
复制代码

 根据进程ID,获取docker容器名称(不推荐)

复制代码
#!/bin/bash

# 拿到输入的参数进程号
current_pid=$1
echo 'input current_pid:'  ${current_pid}

docker_info=''
# function
get_docker_info(){
    docker_info=`docker ps -aq`
    #echo ${docker_info}
}

get_docker_info
echo 'docker_info:' ${docker_info}



# find flag, 0-find 1-not find
find_flag=0
find_container_name=''




while((find_flag==0))
do
    echo 'current_pid:' ${current_pid}
    for loop in ${docker_info}
    do
        container=`docker inspect --format='{{.Name}} - {{.State.Pid}}' ${loop}`  
        #echo 'container:' ${container}
        container_name=`echo ${container} | awk '{print $1}'`
        #echo 'contain_name:' ${container_name}
        container_pid=`echo ${container} | awk '{print $3}'`
        #echo 'container_pid:' ${container_pid}
        
        if [ ${current_pid} == ${container_pid} ]
        then
            echo 'current_pid:' ${current_pid} ' is same with container_pid:' ${container_pid} ' so container is :' ${container_name}
            find_flag=1
            find_container_name=${container_name}
            break;
        else
           #echo 'current_pid:' ${current_pid} ' is not same with container_pid:' ${container_pid} 'so continue loop'
            continue
        fi
    done
    
    #echo 'find_flagg:' ${find_flag}
    if [ ${find_flag}==0 ] 
    then
        proc_stat=`cat /proc/${current_pid}/stat`
        echo 'proc_stat:' ${proc_stat}
        current_ppid=`echo ${proc_stat} | awk '{print $4}'`
        echo 'current_ppid:' ${current_ppid}
        current_pid=${current_ppid}
    else
        echo 'already find find_container_name:' ${find_container_name}
    fi     

done
复制代码

 

根据docker的层id,输出docker容器名

复制代码
#!/bin/bash

# 接收层ID作为输入参数
layer_id="$1"

# 获取所有容器列表
containers=$(docker ps -a --format "{{.ID}}")

# 遍历每个容器
for container_id in $containers; do
  # 执行docker inspect命令并通过grep查找层ID
  inspect_output=$(docker inspect "$container_id" | grep "$layer_id")

  # 检查是否找到匹配的层ID
  if [[ -n "$inspect_output" ]]; then
    # 提取容器名称
    container_name=$(docker inspect --format "{{.Name}}" "$container_id")

    # 移除容器名称前面的斜杠
    container_name=${container_name:1}

    # 输出匹配的容器名称
    echo "层ID $layer_id 对应的容器名称为: $container_name"

    # 退出循环,因为已经找到匹配的容器
    exit 0
  fi
done

# 如果没有找到匹配的容器,则输出相应信息
echo "未找到层ID $layer_id 对应的容器"
exit 1
复制代码

 

posted @   szcj~  阅读(500)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示