Docker构建时如何指定使用自定义证书解决Alpine下apk下载失败问题
问题根因
RUN export定义的环境变量仅在当前RUN指令对应的shell会话中生效,当前层执行完成后变量就会失效,下一层RUN指令无法继承。- Dockerfile的ENV指令不支持波浪号
~自动展开,你配置的ENV SSL_CERT_FILE=~/trusted-certs.pem实际会被解析为字面量路径,而非你预期的用户家目录下的路径,因此不生效。 - 单独配置
SSL_CERT_FILE仅对识别该环境变量的程序生效,不是全局通用的方案。
解决方案
方案1:正确配置全局环境变量
将路径替换为绝对路径避免展开问题,通过ENV定义的环境变量会在所有后续层全局生效:
FROM alpine:3.14.1 # 明确使用绝对路径存放证书 COPY trusted-certs.pem /root/trusted-certs.pem # 用绝对路径配置全局环境变量 ENV SSL_CERT_FILE=/root/trusted-certs.pem RUN apk update && apk upgrade
方案2(更推荐):将证书加入系统全局信任库
直接把自定义证书导入Alpine的系统可信证书库,所有系统内置程序都可以直接识别,无需额外配置环境变量:
FROM alpine:3.14.1 # 将证书复制到Alpine系统证书目录,后缀必须为.crt COPY trusted-certs.pem /usr/local/share/ca-certificates/trusted-certs.crt # 更新系统证书信任库 RUN update-ca-certificates RUN apk update && apk upgrade
内容的提问来源于stack exchange,提问作者ErnieAndBert
相关产品推荐
相关产品推荐

