首页 > 后端开发 > Golang > 如何修复 Docker 多阶段 Go 镜像构建中的'x509:证书由未知机构签名”错误?

如何修复 Docker 多阶段 Go 镜像构建中的'x509:证书由未知机构签名”错误?

Mary-Kate Olsen
发布: 2024-11-04 10:57:30
原创
1008 人浏览过

How to Fix

解决 Docker 多阶段 Go 镜像构建中的“x509:证书由未知机构签名”错误

尝试构建多阶段时在私有网络中为 Go 应用程序暂存 Docker 镜像时,您可能会遇到以下错误:

x509: certificate signed by unknown authority
登录后复制

此错误是由于在通过 go get 或 go mod download 下载依赖项时证书验证困难而出现的。虽然设置 GIT_SSL_NO_VERIFY 环境变量可以绕过 Agent 环境变量的此问题,但在使用 go get 或 go mod download 时不起作用。

解决方案

解决此问题颁发并启用安全证书验证后,您可以使用 openssl 将必要的证书导入到系统的 CA 存储中。例如:

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

# Proceed with your build process...
登录后复制

通过将证书导入 CA 存储,为 git 依赖项检索启用安全证书验证。

示例

以下 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"]
登录后复制

此 Dockerfile 将导入必要的证书并更新 CA 存储,从而允许在专用网络中构建 Go 应用程序的依赖项检索期间进行安全证书验证。

以上是如何修复 Docker 多阶段 Go 镜像构建中的'x509:证书由未知机构签名”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板