我有一個服務器專案。處理程式提供一些來自 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"]
因此,當我嘗試運行容器時,我收到此錯誤:
無法讀取 CA 檔案:太空船 - 打開 CA.pem:沒有這樣的檔案或目錄 連接到資料庫互動期間出錯:打開 CA.pem:沒有這樣的檔案或目錄
*spaceship - 資料庫名稱 *databaseinteractions - 我有“connect_to_db.go”檔案的檔案夾。
服務器正在運行。我專門創建了一個“狀態”處理程式,它為我提供 201 回應。沒關系。但是無法建立資料庫連接。它看不到 CA.pem 檔案。但為什么?可能我應該以不同的方式創建 docker 影像嗎?或者以不同的方式讀取檔案?
感謝您的任何幫助!
uj5u.com熱心網友回復:
當您在本地運行程式查找CA.pem檔案時。但是在 docker 中,您只在 debian 映像中保留專案的可執行構建。
您需要復制專案目錄中的 CA.pem 檔案才能成功運行。
COPY --from=build /app/proj/CA.pem /app/proj
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/414522.html
標籤:
上一篇:按值或參考存盤net.Conn?
