当前位置: 首页 > 知识库问答 >
问题:

Docker容器与Go语言http.获取错误"由未知机构签名的证书"

西门品
2023-03-14

我有一个带有Golang的容器,它调用https api。我使用的是一个scratch容器,当我尝试运行时,我会得到一个由未知机构签署的证书

url := "https://restcountries.eu/rest/v2/name/" + params.Get("country")
response, err := http.Get(url)

我的Dockerfile如下所示:

FROM golang:1.15 AS builder
WORKDIR /GreetingAPI
COPY . /greeting
WORKDIR /greeting
ENV GO111MODULE=on
RUN CGO_ENABLED=0 GOOS=linux go build -o greeting

FROM scratch
COPY --from=builder /greeting .
CMD ["./greeting"]

我用这个answare更新了我的Dockerfile。但是当我尝试构建容器时,我得到了错误:“%ca certificates.crt”not found:not found未能解决:rpc错误:code=Unknown desc=无法计算缓存密钥:“%ca certificates.crt”not found:not found

FROM golang:1.15 AS builder
WORKDIR /GreetingAPI
COPY . /greeting
WORKDIR /greeting
ENV GO111MODULE=on
RUN CGO_ENABLED=0 GOOS=linux go build -o greeting

FROM scratch
ADD ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /greeting .
CMD ["./greeting"]

共有2个答案

易衡
2023-03-14

在构建器阶段安装ca证书并复制到最终映像。比如:

FROM golang:1.15 AS builder
RUN apk update
RUN apk add -U --no-cache ca-certificates && update-ca-certificates
WORKDIR /GreetingAPI
COPY . /greeting
WORKDIR /greeting
ENV GO111MODULE=on
RUN CGO_ENABLED=0 GOOS=linux go build -o greeting

FROM scratch
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /greeting .
CMD ["./greeting"]
余天宇
2023-03-14

我可能需要在链接的答案中更清楚地说明,第一个示例中的副本是一个单阶段示例,其中您有一个证书文件要注入到构建上下文中(通常包含Dockerfile的目录):

FROM scratch
ADD ca-certificates.crt /etc/ssl/certs/
ADD main /
CMD ["/main"]

您有一个多阶段构建,可以按照链接答案后半部分中的多阶段方法进行构建。在分发供应商的另一个阶段安装证书并将其复制到您的scratch阶段:

FROM golang:alpine as build
RUN apk --no-cache add ca-certificates
WORKDIR /go/src/app
COPY . .
RUN CGO_ENABLED=0 go-wrapper install -ldflags '-extldflags "-static"'

FROM scratch
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=build /go/bin/app /app
ENTRYPOINT ["/app"]

然而,第二个示例使用apk假设Alpine作为第一阶段的基础。(它还假设证书需要安装在基本映像中,而在当前的golang映像中情况并非如此。)例如,它基于golang:1.15图像中的Debian。为此,您通常需要apt get命令,但在这种情况下,ca证书包已经安装,因此您可以复制结果:

FROM golang:1.15 AS builder
COPY . /greeting
WORKDIR /greeting
ENV GO111MODULE=on
RUN CGO_ENABLED=0 GOOS=linux go build -o greeting

FROM scratch
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /greeting /
CMD ["/greeting"]
 类似资料:
  • 我创建了一个docker容器,用于使用GoLang与google api对话。我开始使用一个SCRATCH容器,在切换到ubuntu/alpine时,我得到了由未知授权机构签署的错误 解决这个问题的任何帮助都将是巨大的。我可以在我的mac上很好地运行代码。 做了一些研究后,我可以看到这个问题https://github.com/golang/go/issues/24652 但我不知道这是否直接相关

  • 我正在使用Golang 1.9创建一个客户端应用程序。2,我在访问后端时遇到一些问题。问题是我的应用程序在最新版本的Windows和Linux中运行良好,但是,当我在Windows XP上运行它时(是的,不幸的是,我必须支持Windows XP,因为我们的一些客户拒绝升级他们的操作系统),我在尝试执行HTTP get和HTTP POST:

  • 我正在使用Go包来查询pzug。应用程序的容器化如下: 但是,我得到以下错误: 我已经尝试过这里建议的x509证书,该证书由未知的权威机构签署,但运气不佳。有什么想法吗?

  • 我有一个API服务器,使用由受尊敬的CA颁发的非自签名证书。当我连接到此服务器时,我收到以下错误: x509:由未知权限签署的证书 我使用golang客户端通过库进行连接。证书配置正确,因为我没有收到关于它的错误投诉。 我没有预料到这个错误,因为我使用的是CA。我没有得到的错误时,使用网络浏览器。

  • 问题内容: 在运行docker命令时,我不断收到这样的错误: 我正在使用没有任何http代理的Fedora 20 x86_64。 我用google搜索,但找不到任何线索,也不知道如何解决此错误,有人可以给我一些解决此问题的提示吗? 以下是一些其他信息可能会有所帮助: 问题答案: 事实证明,这与CDN提供程序有关。 在这里检查:https : //github.com/dotcloud/docker

  • 我正在使用和创建。我正在使用该公司的VPN。 通过kubectl create-f./rc/mongo-rc.yaml命令创建了RC。 使用kubectl describe pod mongo-5zttk命令时出现以下kubernetes事件: 当我尝试使用访问网址时: 我可以成功地从泊坞中心注册表中提取 映像。 环境信息: minikube版本:v1.14.1 kubectl 客户端版本:v1.