やりたいこと
Docker&GKEでEcho(go)アプリを動かしたい。
困っていること
ローカルでは動かせているが、GKE上にdeployすると動かなくなる。
Echo導入前(Go単品)の時は動いていた。
しかもGKEのpodはエラーログも出してくれておらず、原因が不明。
前提
GKEのpodはrestartもせず、ちゃんと起動している。
[/api]にアクセス時、localではjsonを返すが、GKEは空白の画面を返す。
開発、本番用で同じDockerfileを使用している。
試したこと
以下のことは試しました。
1.GKEの対象クラスタ上podのlog確認
$kubectl logs {対象pod} 出力なし
2.pod内に入り、ビルド生成物の場所に移動し、起動コマンド実行
$kubectl exec ^it {対象pod} sh $cd {app root} $ ./main 出力なし
Dockerfile
本番、開発のDockerfileは同じもので動作確認しております。
FROM alpine:latest as build-stage RUN apk add --no-cache go \ git \ binutils-gold \ curl \ g++ \ gcc \ gnupg \ libgcc \ linux-headers \ make WORKDIR {アプリのrootパス} COPY . . RUN go get "github.com/go-sql-driver/mysql" && \ go get -u github.com/jinzhu/gorm && \ go get -u github.com/labstack/echo/ RUN go build -o main ./cmd FROM alpine:latest as production-stage RUN apk add --no-cache libc6-compat COPY --from=build-stage /root/go/src/ /root/go/src ENTRYPOINT [ "{アプリのrootパス}/main" ]
docker-compose.yaml
単純にbuildしてrunするだけ
version: '3' services: golang: build: context: ./{アプリのrootパス} dockerfile: ./build/dev/Dockerfile container_name: test ports: - 8081:8081
main.go
form値受け取ってjsonで返す
package main import ( "net/http" "github.com/labstack/echo" ) type Test struct { test string `json:"test" form:"test" query:"test"` } func main() { e := echo.New() initRouting(e) e.Logger.Fatal(e.Start(":8081")) } func initRouting(e *echo.Echo) { e.GET("/", index) } func index(c echo.Context) (err error) { t := new(Test) if err = c.Bind(t); err != nil { return } return c.JSON(http.StatusOK, t) }
あなたの回答
tips
プレビュー