One minute
Timezoneが取れるalpineのDockerイメージを作る
Goで書いたアプリのDockerイメージをできるだけ小さくしようとして、 multi stage buildにそってやったら、timezone情報が取れなくてpanicが発生して(‘A`)になったので、その対応策について。
Panic になるコード
普通にmulti stage buildでalpineにビルド済イメージを COPY
して実行すると、下記コードはpanicする。
jst, err := time.LoadLocation("Asia/Tokyo")
if err != nil {
panic(err)
}
alpineは /etc/localtime
がないため。
panic: open /usr/local/go/lib/time/zoneinfo.zip: no such file or directory
goroutine 1 [running]:
main.main()
/go/src/github.com/takecy/tz/main.go:11 +0x22b
make: *** [run_alpine] Error 2
対応
対応は難しいことはなく、単に tzdata
を入れればよい。
RUN apk --no-cache add tzdata
全体の例
FROM golang:1.9.3-alpine AS build
COPY . $GOPATH/src/github.com/takecy/tz
WORKDIR $GOPATH/src/github.com/takecy/tz
RUN go build -o tz .\
&& mv tz /usr/local/bin/
FROM alpine:3.6
RUN apk --no-cache add tzdata
COPY --from=build /usr/local/bin/tz /usr/local/bin/
CMD ["tz"]
Read other posts