1
0

More than 1 year has passed since last update.

go installしたバイナリをscratchイメージで動かす場合の注意点

Posted at

TL; DR

  • webサーバー等netパッケージを使っているバイナリを go install する場合は CGO_ENABLED=0 をつける
    • 付けないと no such file or directory と出てしまう
    • netパッケージをimportしたバイナリはダイナミックリンクでビルドされてしまうのが原因

はじめに

gRPC UI 1のバイナリをマルチステージビルドしたら、no such file or directory と出て実行できませんでした。

$ docker build .
Sending build context to Docker daemon  9.216kB
...
Successfully built 53b474247144
$ docker run -it --rm 53b474247144
exec ./grpcui: no such file or directory

原因

goのバイナリは通常スタティックリンクで生成されますが、netパッケージを使う場合のみダイナミックリンクでビルドされてしまうのが原因でした。
(ダイナミックリンクなのでscratchイメージに持っていくと実行時にライブラリが無くて動かなくなってしまいます)

CGO_ENABLED=0 でC非依存のスタティックリンクリンクを作成すれば、scratchでも動くようになりました。

FROM golang AS builder
ARG CGO_ENABLED=0
RUN go install github.com/fullstorydev/grpcui/cmd/grpcui@latest

#...

参考にさせていただいた記事

  1. gRPC UIは、UI上で手軽にgRPCリクエストを送れるwebアプリ(イメージはSwaggerのgRPC版?)です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0