首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏五分钟学SRE

    【SRE该掌握的利器】云原生容器利器:nsenter

    幸运的是,有一个强大的工具——nsenter,能够帮助我们解决这个问题。 什么是nsenter nsenter是一个功能强大的命令行工具,它允许用户直接进入到一个已经存在的命名空间(namespace)中,并在该命名空间内执行命令。 这一特性使得nsenter成为了云原生环境中不可或缺的诊断工具之一。安装nsenter 大多数Linux发行版已经预装了nsenter工具。如果没有,我们可以通过包管理器安装它。 以下是一些结合nsenter的常见用法:追踪容器内部系统调用    结合strace进行系统调用以追踪进程行为如果我们需要追踪容器内的某个进程的系统调用,可以使用strace与nsenter结合。     nsenter作为一个强大的工具,为云原生环境中的容器排查和调试提供了极大的便利。通过掌握nsenter的使用方法,SRE可以更高效地处理容器内部的问题,提升系统的稳定性和可维护性。

    60820编辑于 2024-04-21
  • 来自专栏五分钟学SRE

    【SRE该掌握的利器】云原生容器利器:nsenter

    幸运的是,有一个强大的工具——nsenter,能够帮助我们解决这个问题。 什么是nsenter nsenter是一个功能强大的命令行工具,它允许用户直接进入到一个已经存在的命名空间(namespace)中,并在该命名空间内执行命令。 这一特性使得nsenter成为了云原生环境中不可或缺的诊断工具之一。 安装nsenter 大多数Linux发行版已经预装了nsenter工具。如果没有,我们可以通过包管理器安装它。 的使用格式及参数 nsenter的基本使用格式如下: nsenter [options] --target <PID> [command [args...]] nsenter作为一个强大的工具,为云原生环境中的容器排查和调试提供了极大的便利。通过掌握nsenter的使用方法,SRE可以更高效地处理容器内部的问题,提升系统的稳定性和可维护性。

    42310编辑于 2024-04-23
  • 来自专栏给点知识

    【Linux技巧1】nsenter命令解决容器内部命令不足的问题

    1.1 nsenter介绍 1.1.1 命令介绍 在docker中,为了尽可能缩减镜像大小,常常不会包含一些常用的工具,类似ping,curl,tcpdump等,虽然精简了镜像,但如果我们需要在容器内部测试网络联通性时 这种需求的工具就是我们今天要介绍的nsenternsenter命令是一个可以在指定进程的命令空间下运行指定程序的命令。它位于util-linux包中。 格式:nsenter [options] [program [arguments]] 参数详情:options:-t, --target pid:指定被进入命名空间的目标进程的pid -m, --mount 很多时候我们需要知道容器内部解析的域名ip信息,如果没有这些工具,本来很简单的事就变得很麻烦,通过以下步骤就可以通过nsenter解决以上问题 1.1.2 使用方法 第一步获取容器的PID // 方法一 进入空间 // 根据id进入空间 [root@VM-4 ~]# nsenter -n -t23069 // 这个时候我们就已经有了容器内部的环境,就可以利用宿主的ping 等工具查看容器内的信息了 [

    3.2K00编辑于 2022-07-01
  • 来自专栏运维之美

    巧用 Nsenter 调取宿主机工具调试容器内程序

    nsenter 安装 nsenter 位于 util-linux 包中,一般常用的 Linux 发行版都已经默认安装。 nsenter 命令可以很方便的进入指定容器的网络命名空间,使用宿主机的命令调试容器网络。 nsenter 用法 首先看下 nsenter 命令的语法: $ nsenter [options] [program [arguments]] options: -a, --all enter all 最常用的参数组合是: # 有的版本不一定有 -a 这个参数 $ nsenter -a -t <pid> <command> $ nsenter -m -u -i -n -p -t <pid> <command > nsenter 使用实例 进入 docker 容器的 namespace 中运行指定程序 使用 nsenter 进入 docker 容器的 namespace 是非常简单的,通常你只需要以下两步:

    12.9K31发布于 2020-10-27
  • 来自专栏散尽浮华

    Docker容器学习梳理--容器登陆方法梳理(attach、exec、nsenter

    这种方式可以替代ssh或者nsenter方式,在容器内进行操作。 使用nsenter或docker exec,都可以在容器的上下文(严格地说,是命名空间)中运行任意命令! 1.安装nsenter nsenter 工具在util-linux包2.23版本后包含。 /configure --without-ncurses [root@localhost util-linux-2.24]# make nsenter && cp nsenter /usr/local /bin 2.nsenter使用 在使用nsenter命令之前需要获取到docker容器的进程,然后再使用nsenter工具进去到docker容器中,具体的使用方法如下: # docker inspect --help #会回显所有与该命令有关的参数 # man nsenter #能查到更加详细的使用示例和参数说明 [root@localhost ~]# nsenter --help Usage

    2.1K60发布于 2018-01-24
  • 来自专栏锅总

    两个有用的运维工具nsenter+cgroup(三)

    两个有用的运维工具nsenter+cgroup(一) 说明,本文用一个例子讲解操作cgroup的5个常用命令,分别为cgcreate、cgset、cgexec、 cgclassify、cgdelete。

    45310编辑于 2024-06-12
  • 来自专栏锅总

    两个有用的运维工具nsenter+cgroup(二)

    线上容器有时可能缺少一些软件用于调试容器,本文举例通过nsenter 工具进入容器net namespace,使用宿主机tcpdump工具进行网络抓包演示; 在线上,若容器内缺少命令,而宿主机上又有的, 120.232.145.185: seq=4 ttl=127 time=11.542 ms 64 bytes from 120.232.145.185: seq=5 ttl=127 time=1 启动第二个窗口抓包 通过nsenter 进入容器 进入后通过ip addr查看网络信息,验证是否进入容器网络 tcpdump抓包 [root@gentlewok ~]# nsenter -t 128342 -n #进入gitlab-runner 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever # 这里tcpdump命令能正常执行 # 是因为没有使用 nsenter

    24110编辑于 2024-06-12
  • 来自专栏锅总

    两个有用的运维工具nsenter+cgroup(一)

    在应用没有用容器的方式运行时,可以用nsenter和cgroup相关命令来进行控制,对应用进行资源隔离和namespace限制。本文先给出命令工具的入口,后续单独出一篇讲其应用场景及使用样例。 一、nsenter linux namespace 控制工具,用于进入和设置namespace [root@gentlewok ~]# nsenter --help Usage: nsenter display this help and exit -V, --version output version information and exit For more details see nsenter [root@gentlewok ~]# nsenter -V nsenter from util-linux 2.23.2 二、cgroup相关命令 用于控制进程资源相关操作 ,在linux机器上执行 即可获得对应用法 https://github.com/libcgroup/libcgroup/tree/main/doc/man 分析下docker容器创建 运行时是runc runc的源码里也写了一个nsenter

    25710编辑于 2024-06-12
  • 来自专栏Debian中国

    连接 Docker Container 的几种方式

    使用 nsenter 进入 container 经过 google 发现了这篇文章。 里面介绍最推荐的是使用 nsenter,这里照抄下安装方式: 这个程序的安装方式很独特,使用docker进行安装: (adsbygoogle = window.adsbygoogle || []).push({}); docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter 使用方法也很简单,首先你要进入的container /bin/bash sudo nsenter –target `docker inspect –format {% raw %}{{.State.Pid}}{% endraw %} $1` –mount 在 nsenter 官方 github 中找到解答: If you are using boot2docker, you can use the function below, to: install

    1.5K20发布于 2018-12-20
  • 来自专栏cmazxiaoma的架构师之路

    Docker-Compose环境搭建和部署SpringBoot项目

    前言 fighting ---- Docker使用nsenter工具进入容器 1.下载nsenter工具 wget https://mirrors.edge.kernel.org/pub/linux /configure --without-ncurses命令进行check 4.输入make nsenter,对nsenter进行编译 5.复制nsenter到/usr/local/bin cp nsenter /usr/local/bin 6.查看nsenter的版本 [root@localhost util-linux-2.33]# nsenter --version nsenter,来自 util-linux /bin/sh if [ -e $(dirname "$0")/nsenter ]; then # with boot2docker, nsenter is not in the PATH but it is in the same folder NSENTER=$(dirname "$0")/nsenter else NSENTER=nsenter fi if [ -z "$1" ]

    4.4K20发布于 2019-04-21
  • 来自专栏编码前线

    Docker容器进入的4种方式(推荐最后一种)

    nsenter进入Docker容器。 关于什么是nsenter请参考如下文章: https://github.com/jpetazzo/nsenter 在了解了什么是nsenter之后,系统默认将我们需要的nsenter安装到主机中 如果没有安装的话 /configure --without-ncurses $ make nsenter $ sudo cp nsenter /usr/local/bin 安装好nsenter之后可以查看一下该命令的使用 在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了。 $ sudo nsenter --target 3326 --mount --uts --ipc --net --pid $ sudo nsenter --target 3326 --mount -

    105.3K30发布于 2018-09-12
  • 来自专栏同步博客

    Docker之进入容器(三)

    可以去看一下这个老外写的原因:为什么不需要在 Docker 容器中运行 sshd   2.3、使用nsenter进入docker容器   对于nsenter网上有比较多且详细的介绍,这里我就说一下我自己理解 个人理解nsenter:通过容器在宿主机中的pid进行通讯   因此:nsenter需要在宿主机安装而非容器或者镜像 # 安装nsenter $ wget https://www.kernel.org/ /configure --without-ncurses $ make nsenter $ sudo cp nsenter /usr/local/bin $ nsenter --help # nsenter可以访问另一个进程名称空间。 因此我们需要获取容器的PID sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9 // 假设进程号为 4426 $ sudo nsenter --target

    1.6K30发布于 2018-12-12
  • 来自专栏全栈程序员必看

    docker容器的启动(docker容器启动时间)

    这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的attach或exec命令,以及第三方的nsenter工具等。 3、nsenter 工具 在util-linux软件包版本2.23+中包含nsenter工具。 /configure --without-ncurses $ make nsenter && cp nsenter /usr/local/bin 为了使用nsenter连接到容器,还需要找到容器进程的PID ,可以通过下面的命令获取: PID=$(docker inspect --format "{ { .State.Pid }}" ) 通过这个PID,就可以连接到这个容器: $ nsenter -

    4.3K30编辑于 2022-07-30
  • 来自专栏我的小碗汤

    Kubernetes 排错、调试常用方法总结

    本文的主角nsenter正是很擅长解决这些问题,nsenter可以进入指定namespace的工具,一般用来在容器环境中进行调试。 调试容器网络 通过nsenter可以轻松在宿主机进入容器的网络命令空间,命令如下: # 设置containerid containerid=xxx # 获取容器主进程 pid=$(docker inspect , netstat等命令 登录 k8s 节点 如果只有Apiserver权限,登录 k8s 节点也可以使用nsenter 临时登录某个节点可以使用如下脚本: 前提是需要拥有一些特殊权限privileded ,hostPID等 node=xxx cmd='[ "nsenter", "--target", "1", "--mount", "--uts", "--ipc", "--net", "--pid", 方法,kubectl debug通过 shell 登录节点时只是共享了pid、hostNetwork,nsenter则更灵活可以使用宿主机的相关工具以及执行特权操作。

    67820编辑于 2023-03-20
  • 【K8s】Kubernetes 网络之 Pod 网络调试

    Pod 网络调试 1、调试工具 nsenter 是 Linux 操作系统的一种命令行工具,允许用户进入指定进程的某个命名空间,并在该命名空间下灵活使用主机的命令行工具、执行特权操作等。 Mount:文件系统命名空间 UTS:主机名和域名命名空间 IPC:进程间通信命名空间 PID:进程命名空间 Network:网络命名空间 User:用户命名空间 通常在 Linux 操作系统中,默认安装有 nsenter 由此可见,我们可以通过 nsenter 进入 Pod 中容器(进程)的网络命名空间,利用 Node 节点已有的命令行工具实现对 Pod 进行网络调试。 -t <pid> -n 使用 Node 节点已安装的 ping、curl、telnet、tcpdump 等工具进行网络调试接口 nsenter 常用参数 -t <pid>:指定要进入的目标进程的 ID -h Usage: nsenter [options] [<program> [<argument>...]]

    57210编辑于 2024-12-27
  • 来自专栏东风微鸣技术博客

    如何通过 kubectl 进入 node shell

    步骤很简单,就是创建上文说的这么一个特权容器,通过 nsenter command 进入 node shell。 示例 yaml 如下: apiVersion: v1 kind: Pod metadata: labels: run: nsenter-v0l86q name: nsenter-v0l86q namespace: default spec: containers: - command: - nsenter - --target - "1" - - 系统里, nsenter 是一个命令行工具,用于进入到另一个 namespace 。 譬如, nsenter -n -t 1 bash 就是进入到 pid 为 1 的进程所在的网络 namespace 里。

    2.6K10编辑于 2022-12-01
  • 来自专栏白石

    CentOS6.X下Docker安装笔记 顶

    /bin/sh if [ -e $(dirname "$0")/nsenter ]; then # with boot2docker, nsenter is not in the PATH but it is in the same folder NSENTER=$(dirname "$0")/nsenter else NSENTER=nsenter fi if [ -z "$1" ] "$NSENTER" $OPTS su - root else # Use env to clear all host environment variables. "$NSENTER" $OPTS env --ignore-environment -- "$@" fi fi 加上可执行chmod +x /bin/docker-enter.sh 运行docker-enter.sh

    80720发布于 2019-08-23
  • 来自专栏Linux Doc

    使用namespace查看docker进程和网络

    进入docker的namespace的简易办法使用nsenter进入docker的namespace,这样就可以用传统命令排查故障了。(1) helpnsenter的help如下。 # nsenter -h 用法: nsenter [options] <program> [<argument>...] 例如:nsenter -t <pid> -n 直接回车,切换到对应的netns。(3) pid问题主要是pid得拿到正确的,有一些是docker自己的。 nsenter -t 2019 -m -p ps -ef以上也可以直接只用-a参数(nsenter,来自 util-linux 2.32.1,有这个参数,早期版本似乎没有),进入该docker容器的所有 方式二用nsenter查找查看docker容器内的接口信息 # nsenter -t 2019 -n ip -d link show 1: lo: <LOOPBACK,UP,LOWER_UP

    15810编辑于 2025-11-23
  • 来自专栏YP小站

    K8S Pod 内抓包快速定位网络问题

    当然有,本文介绍 nsenter 命令,能够进入Pod容器 net 命名空间。并且本文提供一个快速进入Pod容器 net 命名空间脚本,方便大家使用。 nsenter 使用参数 nsenter [options] [program [arguments]] options: -t, --target pid:指定被进入命名空间的目标进程的pid -m 除了进入 net 命名空间,nsenter 还可以进入 mnt, uts, ipc, pid, user 命名空间,以及指定根目录和工作目录。 nsenter nsenter 命令相当于在setns之上做了一层封装,使我们无需指定命名空间的文件描述符,而是指定进程号即可。 指定进程号PID以及需要进入的命名空间后,nsenter会帮我们找到对应的命名空间文件描述符/proc/PID/ns/FD,然后使用该命名空间运行新的程序。

    6.2K1916发布于 2020-06-04
  • 来自专栏开源部署

    为什么不需要在 Docker 容器中运行 SSHD

    这种情况下,你需要 nsenter。 介绍 nsenter nsenter是一个小的工具,用来进入命名空间中。技术上,它可以进入现有的命名空间,或者产生一个进程进入新的一组命名空间。 简单点说:通过使用 nsenter ,你可以进入一个已经存在的container中,尽管这个container没有运行ssh 或者任意特殊用途的守护进程。 从哪里获得 nsenter ? 在GitHub上查看 jpetazzo/nsenter 。 简单的安装是: docker run -v /usr/local/bin:/target jpetazzo/nsenter 它将会把 nsenter 安装到 /usr/local/bin 中,你就可以立刻使用它了 命令  (也就是,nsenter)。

    1.2K30编辑于 2022-07-03
领券