Docker内部的Http调用错误证书由未知授权机构签名

u3r8eeie  于 2022-11-22  发布在  Docker
关注(0)|答案(1)|浏览(114)

在工作中(即在企业环境中),我有一个用Golang编写的Web服务器,它在本地运行良好;然后我将应用程序停靠;但在容器中运行应用程序时,出现错误:x509: certificate signed by unknown authority,从这里它向内部远程API发出https请求。
我猜这意味着我缺少了在Dockerfile中添加适当证书的步骤。
我是否应该找到证书在本地计算机上的位置并将其复制到Docker文件中?这样做是否是常见的做法?如果不是,我还可以做什么?
此外,由于它在本地运行良好,它必须知道在哪里查找证书并成功找到一个。如果我的计算机上有多个证书,它如何知道使用哪个证书?

5jdjgkvh

5jdjgkvh1#

尝试在Docker文件中添加以下行

  1. RUN apk --no-cache add ca-certificates

你也可以参考下面的示例Dockerfile,我在我所有基于golang的项目中使用它。

  1. FROM golang:alpine AS builder
  2. LABEL maintainer="Mayukh Sarkar <mayukh2012@hotmail.com>"
  3. # Redundant, current golang images already include ca-certificates
  4. RUN apk --no-cache add ca-certificates
  5. # Move to working directory (/build).
  6. WORKDIR /build
  7. # Copy and download dependency using go mod.
  8. COPY go.mod go.sum ./
  9. RUN go mod download
  10. # Copy the code into the container.
  11. COPY . .
  12. # Set necessary environment variables needed for our image and build the API server.
  13. ENV CGO_ENABLED=0 GOOS=linux GOARCH=amd64
  14. RUN go build -ldflags="-s -w" -o apiserver .
  15. # 2 staged build
  16. FROM scratch
  17. # copy the ca-certificate.crt from the build stage
  18. COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
  19. # Copy binary and config files from /build to root folder of scratch container.
  20. COPY --from=builder ["/build/apiserver", "/build/.env", "/"]
  21. EXPOSE 9999/tcp
  22. EXPOSE 9000/tcp
  23. # Command to run when starting the container.
  24. ENTRYPOINT ["/apiserver"]
展开查看全部

相关问题