AWS EKS部署Deis应用时Docker构建Alpine源报错如何解决?
问题原因
你的构建报错来自两方面:
- Dockerfile中手动指定了alpine v3.9的软件源,和你使用的
mhart/alpine-node:12基础镜像对应的alpine系统版本不匹配,无法找到对应的bash安装包 - 若修复源配置后仍报错,说明EKS集群中运行Deis构建任务的Pod没有公网访问权限,无法拉取alpine源的软件包
解决方案
方案1:优化Dockerfile配置(优先尝试)
直接删掉apk命令中手动指定v3.9源的-X http://dl-cdn.alpinelinux.org/alpine/v3.9参数,修改后的安装命令如下:
RUN apk add --no-cache --update bash && rm -rf /var/cache/apk/*
如果你的应用没有强制依赖bash的场景,也可以直接删除这行安装bash的命令,alpine自带的sh shell完全可以支撑普通Node.js应用运行。
修改后的完整Dockerfile参考:
FROM mhart/alpine-node:12 ARG SOURCE_VERSION=na ENV SOURCE_VERSION=$SOURCE_VERSION # 不需要bash的话可以完全删掉下面这行RUN命令 RUN apk add --no-cache --update bash && rm -rf /var/cache/apk/* WORKDIR /app ADD . . RUN npm install EXPOSE 3200 CMD ["node", "app.js"]
方案2:修复EKS集群公网访问权限
如果修改Dockerfile后还是出现源访问的临时错误,按以下步骤检查集群网络配置:
- 确认Deis Builder Pod所在的EKS节点所在子网配置了NAT网关,或者节点本身绑定了公网IP,具备公网访问能力
- 检查EKS节点的安全组出站规则,是否允许80、443端口的公网访问请求
- 检查集群网络ACL配置,没有拦截公网出向流量
方案3:离线环境适配
如果你的EKS集群不允许访问公网,可以将基础镜像替换为内部私有镜像仓库中已经预装了bash的Node.js镜像,或者将apk源替换为你公司内部的私有alpine软件源。
内容的提问来源于stack exchange,提问作者jayaprakash R
相关产品推荐
相关产品推荐

