lestrrat-go/server-starterというホットデプロイしてくれるものがある。
これを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: