You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linuxkit中Redis进程已运行但找不到对应容器的问题咨询

Linuxkit中Redis容器的定位与访问问题

问题背景

我在研究Linuxkit项目时,使用redis-os.yml示例创建了镜像。启动redis-os后,Redis运行正常,但看不到对应的Redis服务器容器,无法确定其位置:

pstree输出:

(ns: getty) linuxkit-f6b2836a15cb:~# pstree
init-+-containerd---7*[{containerd}]
     |-containerd-shim-+-tini---rungetty.sh-+-rungetty.sh---login---sh
     |                 |                    `-rungetty.sh---login---sh---bash--+
     |                 `-11*[{containerd-shim}]
     `-containerd-shim-+-redis-server---3*[{redis-server}]
                       `-11*[{containerd-shim}]

runc list输出:

(ns: getty) linuxkit-f6b2836a15cb:~# runc list
    ID           PID         STATUS      BUNDLE                          CREATED                         OWNER
    000-dhcpcd   0           stopped     /containers/onboot/000-dhcpcd   2022-08-12T21:38:05.40297821Z   root

netstat输出:

(ns: getty) linuxkit-f6b2836a15cb:~# netstat -natp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      421/redis-server
tcp        0      0 :::6379                 :::*                    LISTEN      421/redis-server

问题: Redis容器在哪里?如何访问其配置文件或进入容器文件系统?


解答

为什么看不到Redis容器?

Linuxkit中的Redis是以service容器的方式运行的,这类容器由containerd托管,进程通过containerd-shim维持运行,而runc list仅显示由runc直接管理的容器实例,因此Redis容器不会出现在该命令的结果中,但从pstree输出能确认redis-server进程确实处于容器命名空间内。

定位Redis容器并访问其资源的方法

  • 使用containerd客户端查看容器
    Linuxkit默认采用containerd作为容器运行时,使用ctr命令可以查看所有容器和任务:

    # 列出所有容器
    ctr containers list
    # 列出所有运行中的任务
    ctr tasks list
    

    执行后会找到Redis对应的容器名称或ID。

  • 进入Redis容器的命名空间
    已知Redis进程PID为421,通过nsenter命令进入该进程的命名空间,即可获得容器内部的操作环境:

    nsenter -t 421 -m -u -i -n -p sh
    

    该命令会挂载目标进程的挂载、UTS、IPC、网络和PID命名空间,等同于进入容器内部。

  • 查找并访问Redis配置文件
    进入容器命名空间后,Redis配置文件通常位于/etc/redis/redis.conf,直接查看即可:

    cat /etc/redis/redis.conf
    

    如果不确定配置文件路径,可通过进程参数确认:

    ps aux | grep redis-server
    

    输出内容会显示redis-server加载的配置文件路径。

  • 直接访问容器文件系统目录
    Linuxkit的容器文件系统存储在/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/目录下,每个快照对应一个容器的文件系统:

    # 获取Redis容器的快照ID
    ctr containers info <redis容器名称> | grep snapshot
    # 访问快照对应的文件系统
    ls /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/<快照ID>/fs
    

内容的提问来源于stack exchange,提问作者Satish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:18:29