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号>,可直接获得容器名称。

浙公网安备 33010602011771号