docker容器中运行的进程,根据宿主机的PID,获得容器的名字

方法1:分步实现

ps -eo 'pid,cgroup'|grep -v grep |grep <宿主机PID>

会输出一个长字符串,进行第二步:

docker ps --no-trunc|grep <刚刚输出的长字符串>

最终获得容器号

方法2:bashrc中定义命令

在~/.bashrc 中添加以下代码:

# 查 PID 属于哪个 Docker 容器,并输出容器名称
gcbp() {
    if [ -z "$1" ]; then
        echo "用法: gcbp <PID>"
        return 1
    fi

    PID=$1

    # 从 cgroup 中提取 container ID
    CGROUP_LINE=$(ps -eo pid,cgroup | grep -v grep | awk -v pid="$PID" '$1==pid {print $0}')

    if [ -z "$CGROUP_LINE" ]; then
        echo "未找到 PID $PID 的 cgroup 信息"
        return 1
    fi

    # 提取 scope 名称 docker-xxxx.scope
    SCOPE=$(echo "$CGROUP_LINE" | grep -o 'docker-[0-9a-f]\{64\}\.scope')

    if [ -z "$SCOPE" ]; then
        echo "PID $PID 不属于 Docker 容器"
        return 1
    fi

    # 转换 scope 为 container ID(去掉 docker- 和 .scope)
    CID=${SCOPE#docker-}
    CID=${CID%.scope}

    # 通过 docker ps 查容器名称
    CONTAINER_NAME=$(docker ps --no-trunc --format '{{.ID}} {{.Names}}' | awk -v id="$CID" '$1==id {print $2}')

    if [ -z "$CONTAINER_NAME" ]; then
        echo "未找到容器:$CID"
        return 1
    fi

    echo "$CONTAINER_NAME"
}

source ~/.bashrc之后,用gcbp <进程的PID号>,可直接获得容器名称。

参考:https://hellogitlab.com/CI/docker/get_container_by_pid

posted @ 2025-11-17 14:34  shangrain  阅读(1)  评论(0)    收藏  举报