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

在容器内调用yq命令时遭遇Permission Denied问题求助

问题分析与解决方案

你的报错核心是yq二进制文件权限不足、路径配置错误,结合Dockerfile和Jenkins流水线逐一排查:

Dockerfile的问题点

  1. ENTRYPOINT指向错误:你创建了/usr/bin/yq目录,但ENTRYPOINT却指向这个目录,而非实际的yq可执行文件,不符合容器入口的配置要求。
  2. 二进制文件路径与命名问题:你把yq下载到/usr/bin/yq子目录下,文件名为yq_linux_amd64,但系统默认PATH仅包含/usr/bin,子目录不会被搜索,执行yq --version时系统找不到对应命令。
  3. 缺少执行权限:下载的yq_linux_amd64未添加可执行权限,即使找到文件也无法运行,直接触发Permission Denied报错。

修正后的Dockerfile

FROM some_registry/some_prj/busybox:1.31.1
LABEL maintainer="this.maintainer@com"

# 创建yq用户组和用户
RUN addgroup -S yq && adduser -S yq -G yq

# 以root身份下载yq到/usr/bin目录,重命名为yq,添加执行权限后修改归属
RUN wget -O /usr/bin/yq "https://some_registry/nexus/repository/applications-to-deploy/yq/yq_linux_amd64" \
    && chmod +x /usr/bin/yq \
    && chown yq:yq /usr/bin/yq

USER yq

# 正确指向可执行文件
ENTRYPOINT ["/usr/bin/yq"]

Jenkins流水线调整(可选)

修正镜像后,无需再覆盖entrypoint,直接调用即可:

node("Build-Node"){    
    def sourceArtefact
    stage("checkout"){
        checkout scm
    }
    stage("invoke yq"){
        docker.withRegistry("https://some_prj/harbor/", "robot_id_to_pull"){
            docker.image("some_prj/yq:v0.5").inside(){
                sh "yq --version"
            }
        }
    }
}

验证步骤

  1. 重新构建镜像并推送到仓库
  2. 运行Jenkins流水线,检查yq --version是否正常输出版本信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:42:42