There's an echo in my head

日々のメモ。

Alpine上でstart_serverを使おうとしたらno such file or directory

lestrrat-go/server-starterというホットデプロイしてくれるものがある。

github.com

これをAlpine LinuxなDockerコンテナ上で使おうとしたら下記のようなエラーが出た。

standard_init_linux.go:190: exec user process caused "no such file or directory"

結論から書くと、原因は依存ライブラリがdynamic linkされた実行ファイルを使っているのが原因だった。どうやらReleasesに置かれている実行ファイルはlibcなどが環境にある前提のものらしく、Alpine Linuxにはそのようなものはないので上記のようなエラーが出てしまっていた。

というわけでgolangで書いたアプリケーションのstatic link化を参考に手元でstatic linkしたものをビルドして使ったら上記のようなエラーは出なくなった。

cd $GOPATH/src/github.com/lestrrat-go/server-starter/cmd/start_server
GOOS=linux GOARCH=amd64 go build -a -tags netgo -installsuffix netgo --ldflags '-extldflags "-static"'

しかしここで指定してるnetgoとは何なんだろう :thinking:

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。