如何在 docker 构建期间指定和使用证书文件
Posted
技术标签:
【中文标题】如何在 docker 构建期间指定和使用证书文件【英文标题】:How to specify and use a cert file during a docker build 【发布时间】:2022-01-02 07:09:44 【问题描述】:我的公司刚刚更新了我们的安全性,现在我们需要添加自定义证书文件的使用。我的本地 docker 构建现在无法在构建期间下载包。为了解决这个问题,我需要在 docker build 中使用一个证书文件。
如果我尝试在本文末尾使用 Dockerfile 构建映像,则会收到以下错误,表明权限被拒绝,因为它需要证书 -
=> ERROR [4/4] RUN apk update && apk upgrade 0.3s
------
> [4/4] RUN apk update && apk upgrade:
#8 0.194 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz
#8 0.232 140008555400008:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913:
#8 0.233 ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.14/main: Permission denied
#8 0.233 WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.14/main: No such file or directory
#8 0.233 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz
#8 0.273 140008555400008:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1913:
#8 0.273 ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.14/community: Permission denied
#8 0.273 WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.14/community: No such file or directory
#8 0.273 2 errors; 14 distinct packages available
如果我注释掉RUN apk update && apk upgrade
,它就会生成。我shell进入容器,手动运行export SSL_CERT_FILE=~/trusted-certs.pem
,然后手动运行apk update && apk upgrade
,它将执行apk安装。
我也尝试过使用 ENV 和 ARG,但没有成功。
如果我像这样RUN SSL_CERT_FILE=~/biw-trusted-certs.pem apk update && SSL_CERT_FILE=~/biw-trusted-certs.pem apk upgrade
更新 Dockerfile 中的 apk 命令,它将在构建期间工作,但添加到所有 apk 命令中会很乏味。
我确实需要这个才能在 Alpine linux 中工作。
我的 Dockerfile -
FROM alpine:3.14.1
COPY trusted-certs.pem ~/trusted-certs.pem
#ARG SSL_CERT_FILE=~/trusted-certs.pem
#ENV SSL_CERT_FILE=~/trusted-certs.pem
RUN export SSL_CERT_FILE=~/trusted-certs.pem
RUN apk update && apk upgrade
【问题讨论】:
【参考方案1】:我终于明白了。
所有都可以用这个 -
FROM alpine:3.14.1
COPY trusted-certs.pem /root/trusted-certs.pem
RUN SSL_CERT_FILE=~/trusted-certs.pem apk add ca-certificates
RUN update-ca-certificates
RUN apk update && apk upgrade
RUN apk add curl
RUN curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip
更干净:
FROM alpine
COPY ./trusted-certs.pem /usr/local/share/ca-certificates/
RUN cat /usr/local/share/ca-certificates/trusted-certs.pem >> /etc/ssl/certs/ca-certificates.crt
RUN apk update && apk add --no-cache jq
RUN apk add curl
RUN curl https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip -o awscliv2.zip
【讨论】:
以上是关于如何在 docker 构建期间指定和使用证书文件的主要内容,如果未能解决你的问题,请参考以下文章
在构建期间将文件从 GCS 复制到 Cloud Run docker 容器中
如何为使用 OpenSSL 创建客户端证书指定 CA 私钥密码