docker - /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}
我该如何解决这个问题?
解决方案
刚刚测试过,它对我有用,所以它可能与一些网络问题有关。我的建议是尝试将此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
从这些代理处访问。为此,请尝试wget
在Dockerfile
第一次 fetch中运行 a apk
。
RUN wget http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
推荐阅读
- php - PHP通用函数实现点符号导航到对象的层次结构并检索属性
- ruby-on-rails - 3 个表的最佳关系是什么,多态或 has_many through?
- apache-kafka - 当应用程序没有完成偏移提交时kafka流应用程序的行为(并且自动提交关闭)
- c - 如果我使用 execl() 运行它,如何获得 /bin/ls -R 的返回值?
- jwt - 当 secretOrKey 不可用时在 Nestjs 中使用 JwtStrategy
- c++ - 单例模式 - 共享库中的符号和动态加载
- flutter - 你如何在颤振中添加一张卡片?
- sql - 加入 3 个表,从 2 个不同的表和按材料名称分组的总数量
- python - 展开页面顶部的画布
- javascript - 如何使用 fetch 在本地 json 文件中发布?