Closed2

GoのDockerイメージをCloud Runにデプロイするとエラーになり起動失敗する件

yuuutoyuuuto

ローカルでは正常に動作するGoのAPIアプリケーションを動かすコンテナイメージをCloud Runにデプロイすると、8080ポートでの起動/リッスンに失敗し、エラーになってしまう。

以下、失敗したDockerfileの内容

FROM golang:1.21.6-alpine3.19 as builder

WORKDIR /app

COPY go.mod go.sum ./

RUN go mod download

COPY . .

RUN go build -o api ./cmd/api/main.go


# Multi-Stage build 
FROM alpine:latest

WORKDIR /root

COPY --from=builder /app/api .

EXPOSE 8080

CMD ["./api"]

Cloud Loggingに出力されたエラー内容

Ready condition status changed to False for Service go-app-test with message:
Revision 'go-app-test-00002-v4x' is not ready and cannot serve traffic.
The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. 
Logs for this revision might contain more information.
yuuutoyuuuto

エラーからポートの設定周りが悪いかと思い、見直したが問題なし。
調べているとそもそもアプリケーションの立ち上げに失敗しているようだった。
以下エラーも出力されていた

terminated: Application failed to start: failed to load /root/api: exec format error

以下のようにgo buildの内容を変更すれば成功した。

[before]
RUN go build -o api ./cmd/api/main.go

[after]
RUN GOOS=linux GOARCH=amd64 go build -o api ./cmd/api/main.go

ついでにCGO_ENABLEDも追加。無事デプロイの最低限の動作確認は完了

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o api ./cmd/api/main.go

参考
https://cloud.google.com/code/docs/intellij/arm?hl=ja
https://cloud.google.com/run/docs/troubleshooting?hl=ja

このスクラップは3ヶ月前にクローズされました