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

为何在Google Container Optimized OS上无法使用kubectl exec -it登录容器

问题根因

你遇到的126报错和Google Container Optimized OS节点无关,核心是目标容器使用了无基础系统组件的极简镜像构建(比如scratch、distroless系列镜像),这类镜像内部不存在/bin/bash、/bin/sh等shell程序,甚至连报错中提到的env基础可执行文件都没有,因此所有指定shell路径的exec操作都会失败。

解决方案

方案1:临时进入运行中的容器(无需重建镜像)

提前准备对应容器CPU架构的静态编译版busybox,通过kubectl cp命令拷贝到容器可写目录后执行:

  1. 拷贝二进制到容器
    kubectl cp ./busybox <pod所在命名空间>/<pod名称>:/tmp/busybox
  2. 执行进入容器
    kubectl exec -it <pod名称> -- /tmp/busybox sh

注:使用的busybox必须为对应容器架构的静态编译版本,动态链接的二进制会因缺失依赖库无法运行

方案2:调整镜像构建逻辑(永久支持exec进入)

如果是自行维护的业务镜像,建议调整Dockerfile,在构建阶段将需要的shell和基础工具注入最终镜像,多阶段构建参考示例:

# 业务程序构建阶段
FROM golang:1.22 as builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o my-service .

# 基础工具提取阶段
FROM alpine:3.20 as tool-layer
RUN apk add --no-cache bash busybox

# 最终运行镜像
FROM gcr.io/distroless/static-debian12
# 拷贝业务程序
COPY --from=builder /app/my-service /my-service
# 拷贝shell和基础工具
COPY --from=tool-layer /bin/bash /bin/bash
COPY --from=tool-layer /bin/busybox /bin/busybox
# 注册busybox内置命令
RUN ["/bin/busybox", "--install", "/bin"]

ENTRYPOINT ["/my-service"]

重新构建镜像上线后,即可正常执行kubectl exec -it <pod名> -- bash/sh进入容器。

内容的提问来源于stack exchange,提问作者Sankar Prasanth Gadhamsetti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 06:21:02