Docker 多阶段构建:解决“x509:由未知机构签署的证书”错误
尝试为 Go 构建 Docker 镜像时使用多阶段构建的私有企业网络,可能会出现“x509:由未知权威机构签名的证书”错误。此问题源于检索 Go 依赖项时的证书和身份验证问题。
理解问题:
发生错误的原因是 Go 使用 git 来访问依赖项,利用卷曲。这需要将必要的证书导入到系统的 CA 存储中。最初建议使用环境变量 GIT_SSL_NO_VERIFY=1,但事实证明这种方法对于获取依赖关系无效。
解决方案:将证书导入到 CA Store
到要解决这个问题,需要将相关证书导入到系统的CA存储中。执行此操作的方法因操作系统而异,但通常涉及使用 openssl 命令。
例如,在基于 Debian 的系统中,可以使用以下命令:
修改后的 Dockerfile :
通过将这些证书导入步骤合并到 Dockerfile 中,可以解决问题,从而可以获取依赖项并成功进行构建。以下是更新后的 Dockerfile:
FROM golang:latest as builder RUN apt-get update && apt-get install -y ca-certificates openssl ARG cert_location=/usr/local/share/ca-certificates # Get certificate from "github.com" RUN openssl s_client -showcerts -connect github.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > ${cert_location}/github.crt # Get certificate from "proxy.golang.org" RUN openssl s_client -showcerts -connect proxy.golang.org:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > ${cert_location}/proxy.golang.crt # Update certificates RUN update-ca-certificates WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN GO111MODULE="on" CGO_ENABLED=0 GOOS=linux go build -o main ${MAIN_PATH} FROM alpine:latest LABEL maintainer="Kozmo" RUN apk add --no-cache bash WORKDIR /app COPY --from=builder /app/main . EXPOSE 8080 CMD ["/./main"]
以上是如何修复 Go 项目 Docker 多阶段构建中的'x509:证书由未知机构签名”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!