我应该如何使用 CA.pem 文件为 golang proj 配置 Dockerfile?在容器CA里面,找不到pem

How should I configure Dockerfile for golang proj with a CA.pem file? Inside the container CA,pem can't be found

我有一个服务器项目。处理程序提供来自 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 build

WORKDIR /app/proj

COPY go.mod .
COPY go.sum .
RUN go mod download

COPY . .

RUN go build -o ./out/proj .

##
## Deploy
##
FROM gcr.io/distroless/base-debian10

WORKDIR /

COPY --from=build /app/proj/out/proj /app/proj

EXPOSE 8080

ENTRYPOINT ["/app/proj"]

所以当我尝试 运行 容器时 我收到这个错误:

Failed to read the CA file:spaceship - open CA.pem: no such file or directory Error during connection to databaseinteractions: open CA.pem: no such file or directory

*宇宙飞船 - 数据库名称 *databaseinteractions - 我有“connect_to_db.go”文件的文件夹。

服务器是运行宁。我专门创建了一个“状态”处理程序,它为我提供了 201 响应。没关系。但是无法建立数据库连接。 它没有看到 CA.pem 文件。但为什么? 也许我应该以不同的方式创建 docker 图像?或者以不同的方式读取文件?

感谢您的帮助!

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

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

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