Closed2
GoのDockerイメージをCloud Runにデプロイするとエラーになり起動失敗する件
ローカルでは正常に動作する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 /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.
エラーからポートの設定周りが悪いかと思い、見直したが問題なし。
調べているとそもそもアプリケーションの立ち上げに失敗しているようだった。
以下エラーも出力されていた
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
参考
このスクラップは2024/01/21にクローズされました