亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 Go 服務器作為 Docker 容器運行時出現權限被拒絕錯誤

將 Go 服務器作為 Docker 容器運行時出現權限被拒絕錯誤

Go
汪汪一只貓 2023-08-21 14:35:34
我想將我的 Go 服務器部署到 Google Cloud Run。我從本指南復制了 Dockerfile 。FROM golang:1.13 as builderWORKDIR /appCOPY go.* ./RUN go mod downloadCOPY . ./RUN CGO_ENABLED=0 GOOS=linux go build -v -o serverRUN chmod a+x serverFROM alpine:3RUN apk add --no-cache ca-certificatesCOPY --from=builder /app/server /serverCMD ["/server"]在將其部署到 Cloud Run 之前,我想通過使用 構建映像并docker build -t server .運行容器來在本地測試它docker run server。它失敗并出現以下錯誤:docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"/server\": permission denied": unknown.感謝您的幫助。
查看完整描述

3 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

潛在問題1

如果更改alpinedebian適合您,則意味著這是交叉編譯的問題。

golang映像基于 debian,并使用 glibc,alpine映像使用 musl libc。有時,它們不兼容,并會出現最糟糕的錯誤消息。

所以我懷疑這不是 Cloud Run 問題,而是之前的問題。


潛在問題2

類似的事情曾經發生在我身上,結果證明我正在構建的包不是?package main。因此,我沒有生成可執行二進制文件,而是生成了一個目標文件 (.o),當然,無論我如何努力“chmod +x”,它都不會啟動。

驗證您正在構建的 go 包路徑實際上是package main.


查看完整回答
反對 回復 2023-08-21
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

嘗試添加RUN chmod a+x 到最終版本。

COPY --from=builder /app/server /server
RUN chmod a+x /server
CMD ["/server"]


查看完整回答
反對 回復 2023-08-21
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

顯然,這可能是因為 alpine linux 過于精簡,以至于缺少容器正常構建或運行所需的關鍵軟件包。

對于我的情況,它丟失了git。我git在 ca-certificates 之后添加到 RUN 行,以確保它已安裝。進行此更改后,我的 Cloud Run 實例可以正常運行。

# Use the official Golang image to create a build artifact.

# This is based on Debian and sets the GOPATH to /go.

FROM golang:1.19 as builder


# Create and change to the app directory.

WORKDIR /app


# Retrieve application dependencies using go modules.

# Allows container builds to reuse downloaded dependencies.

COPY go.* ./

RUN go mod download


# Copy local code to the container image.

COPY . ./


# Build the binary.

# -mod=readonly ensures immutable go.mod and go.sum in container builds.

RUN CGO_ENABLED=0 GOOS=linux go build -mod=readonly -v -o server


# Use the official Alpine image for a lean production container.

# https://hub.docker.com/_/alpine

# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds

FROM alpine:3

RUN apk add --no-cache ca-certificates git


# Copy the binary to the production image from the builder stage.

COPY --from=builder /app/server /server


# Run the web service on container startup.

CMD ["/server"]


查看完整回答
反對 回復 2023-08-21
  • 3 回答
  • 0 關注
  • 400 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號