首页 > 解决方案 > /bin/sh -c apk --no-cache 返回非零代码 4

问题描述

Jenkins 构建在所有节点上都失败,除了一个我在构建 docker 映像时遇到错误

Could not build image: The command '/bin/sh -c apk --no-cache update &&     apk --no-cache add python py-pip py-setuptools ca-certificates groff &&     pip --no-cache-dir install cfn-lint &&     pip --no-cache-dir install awscli==${AWS_CLI_VERSION}' returned a non-zero code: 4 -> [Help 1]

我的码头文件是

FROM openjdk:8-jre-alpine

# Versions: https://pypi.python.org/pypi/awscli#downloads
ENV AWS_CLI_VERSION 1.16.100

RUN apk --no-cache update && \
    apk --no-cache add python py-pip py-setuptools ca-certificates groff && \
    pip --no-cache-dir install cfn-lint && \
    pip --no-cache-dir install awscli==${AWS_CLI_VERSION}

我该如何解决这个问题?

标签: dockerjenkins

解决方案


刚刚测试过,它对我有用,所以它可能与一些网络问题有关。我的建议是尝试将此RUN命令分成多个RUN(或至少两个),以便找出哪个命令返回错误代码4

FROM openjdk:8-jre-alpine

# Versions: https://pypi.python.org/pypi/awscli#downloads
ENV AWS_CLI_VERSION 1.16.100

RUN apk --no-cache update && \
    apk --no-cache add python py-pip py-setuptools ca-certificates groff

RUN pip --no-cache-dir install cfn-lint && \
    pip --no-cache-dir install awscli==${AWS_CLI_VERSION}

一个假设

由于apk使用wget

除了本地存储库之外,apk 实用程序还使用busybox wget 来获取使用http:、https: 或ftp: 协议的包。以下是有效的存储库文件:

错误代码4可能来自wget,如果是这样,它的含义是

网络故障。

所以我的猜测是某些代理无法访问下载包的位置。请检查您是否可以http://dl-cdn.alpinelinux.org从这些代理处访问。为此,请尝试wgetDockerfile第一次 fetch中运行 a apk

RUN wget http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz

推荐阅读