为了账号安全,请及时绑定邮箱和手机立即绑定

我应该如何使用 CA.pem 文件为 golang proj 配置 Dockerfile?

我应该如何使用 CA.pem 文件为 golang proj 配置 Dockerfile?

Go
红颜莎娜 2022-10-24 16:33:02
我有一个服务器项目。处理程序提供一些来自 postgres 数据库的数据。对于连接,我有一个 CA.pem。当我在本地运行 main.go 时 - 它正在工作。CA.pem 位于 proj 文件夹中。它是这样调用的:pem, err := ioutil.ReadFile("CA.pem")    if err != nil {        fmt.Fprintf(os.Stderr, "Failed to read the CA file:%s - %s", el, err)        return err    }    if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {        fmt.Fprint(os.Stderr, "Failed to append PEM")    }项目结构:├──project/    ├──main.go      ├──Dockerfile      ├──CA.pem     ├──go.mod      ├──...      ├──folder1/    |  ├─...    └──folder2/       └──...Dockerfile 看起来像:# syntax=docker/dockerfile:1## ## Build## FROM golang:1.17 AS buildWORKDIR /app/projCOPY go.mod .COPY go.sum .RUN go mod downloadCOPY . .RUN go build -o ./out/proj .#### Deploy##FROM gcr.io/distroless/base-debian10WORKDIR /COPY --from=build /app/proj/out/proj /app/projEXPOSE 8080ENTRYPOINT ["/app/proj"]因此,当我尝试运行容器时,我收到此错误:无法读取 CA 文件:太空船 - 打开 CA.pem:没有这样的文件或目录 连接到数据库交互期间出错:打开 CA.pem:没有这样的文件或目录*spaceship - 数据库名称 *databaseinteractions - 我有“connect_to_db.go”文件的文件夹。服务器正在运行。我专门创建了一个“状态”处理程序,它为我提供 201 响应。没关系。但是无法建立数据库连接。它看不到 CA.pem 文件。但为什么?可能我应该以不同的方式创建 docker 图像吗?或者以不同的方式读取文件?感谢您的任何帮助!
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

当您在本地运行程序查找CA.pem文件时。但是在 docker 中,您只在 debian 映像中保留项目的可执行构建。

您需要复制项目目录中的 CA.pem 文件才能成功运行。

COPY --from=build /app/proj/CA.pem /app/proj


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信