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

在原生K3s集群中部署Docker-in-Docker(Dind)的问题求助

问题描述

我在基于RHEL8的K3s集群Pod中尝试使用Docker-in-Docker(Dind)时遇到了问题。这个K3s集群是通过脚本curl -sfL https://get.k3s.io | sh -安装的,系统里没装Docker和Podman。

相关版本信息:

k3s -v
k3s version v1.25.4+k3s1 (0dc63334)
go version go1.19.3

系统信息:

Operating System: Red Hat Enterprise Linux 8.8 (Ootpa)
       CPE OS Name: cpe:/o:redhat:enterprise_linux:8::baseos
            Kernel: Linux 4.18.0-477.13.1.el8_8.x86_64
      Architecture: x86-64

我想把/run/k3s/containerd/containerd.sock暴露给Dind容器(替代Docker环境下的/var/run/docker.sock),但不知道去哪找连接containerd所需的TLS证书。


解决方法

1. 理清containerd的默认配置逻辑

默认情况下,K3s自带的containerd不启用TLS认证,它的Unix域套接字通信是本地访问模式,根本不需要TLS证书。你可能混淆了Docker的TLS配置逻辑,containerd在这里的机制完全不同。

2. 直接挂载socket并配置客户端使用

在Pod配置里,直接把宿主机的/run/k3s/containerd/containerd.sock挂载到容器内的/run/containerd/containerd.sock,然后通过以下方式调用:

  • 使用containerd原生工具ctr:ctr --address /run/containerd/containerd.sock images ls
  • 用Docker CLI连接containerd:设置环境变量export DOCKER_HOST=unix:///run/containerd/containerd.sock,之后就能用docker命令直接操作

3. 非必要场景:手动启用containerd TLS认证

如果你的业务场景必须启用TLS,需要修改K3s的containerd配置:

  • 找到默认配置文件路径:/var/lib/rancher/k3s/agent/etc/containerd/config.toml
  • 添加TLS相关配置片段:
[grpc]
  address = "tcp://0.0.0.0:你的containerd端口"
  tls_config = { cert_file = "/自定义路径/server.crt", key_file = "/自定义路径/server.key", ca_file = "/自定义路径/ca.crt" }
  • 用openssl自行生成CA和服务器证书,重启K3s服务:systemctl restart k3s

4. Dind容器的适配提醒

Dind本身是用来运行独立Docker daemon的,如果你只是想让容器内工具调用宿主机containerd,完全不需要Dind——直接挂载socket、安装对应工具就行。如果必须用Dind,要给容器加privileged权限,同时调整Dind配置,让它连接宿主机的containerd而非启动自身的Docker daemon。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:58:21