`go build` した Go のバイナリを実行すると「/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found`」を出力して止まるときにやったこと。
go build
した Go のバイナリを実行すると次のメッセージを出力して止まるときにやったことのメモ。
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found`
「/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32' not found
」を出力して止まる
やったこと
go build
した Go のバイナリを Docker イメージに入れて実行すると「/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32' not found
」を出力して止まってしまうようだった。
Docker のベースイメージは distroless の debian を使っているのだけど Docker イメージに入れてる Go のバイナリを go build
したマシン (Arch Linux) で実行するとちゃんと動くので、おそらく go build
するときの設定がよろしくない可能性が高そう。
結論
go build
した Go のバイナリを実行すると出力するメッセージでググったら一発だった。
right, you ran into this issue because your build machine (arch) is running newer glibc compared to your deployment host ( ubuntu ), usually, if it was otherway around it would have worked without any issues.
go build
するマシンの glibc のバージョンが go build
した Go バイナリを動かすマシンの glibc のバージョンより新しいとこの事象が発生するようなので go build
するマシンの glibc のバージョンを下げるか go build
した Go バイナリを動かすマシンの glibc のバージョンを上げるかしたら事象は解消しそう。
ただ glibc のバージョンを変えると影響が非常に大きくなると思うので go build
するマシンの glibc のバージョンはおいそれと上げられないし go build
した Go バイナリを動かすマシンの glibc のバージョンを上げるのも少し手間がかかりそう。
結論としては go build
するときに CGO_ENABLED=0
のように指定して cgo を無効にして Go バイナリをビルドすればいい。
CGO_ENABLED=0 go build
みたいな感じでビルドした Go のバイナリを Docker イメージに入れて実行すると前述の /lib/x86_64-linux-gnu/libc.so.6: version 〜 not found
のメッセージが出なくなった。よさそう。