您好,登錄后才能下訂單哦!
今天小編給大家分享一下怎么在golang鏡像中設置指定時區的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
我們在構建鏡像的時候,經常會使用alphine
作為基礎鏡像,或者就直接從scratch
構建了;這樣構建之后的鏡像非常的小,傳輸也更加的快
但是這種鏡像也會有一個問題,就是只能使用UTC
時區,不能加載別的時區,因為鏡像中沒有包含時區文件;雖然UTC
時區也很好用,但是有時候在處理一些定時任務,或者是打印日志時,還是希望能夠使用Local Time
為了解決這個問題,我們需要更改鏡像文件,將時區文件包含進去,然后使用ENV
設置本地時區;
添加時區文件
在Go語言中,時區信息通常從操作系統環境變量中讀取。具體來說,它使用了名為TZ
的環境變量。如果未設置該變量,則使用操作系統的默認時區
首先,我們需要知道的是確定golang
會從哪些路徑中讀取時區文件,默認情況下,golang
會從如下的路徑中讀取時區文件:
/usr/share/zoneinfo/
/usr/share/lib/zoneinfo/
/usr/lib/locale/TZ/
當然,也可以通過ENV ZONEINFO
指定一個時區文件;那我們如何將時區文件放入到這些目錄下面呢
大部分時候,我們都可以從基礎鏡像中找到時區文件,然后將其添加到最終鏡像中就可以了;但是,有時候我們會使用golang:alphine
鏡像,這種鏡像本身并不包含時區文件,所以我們需要使用命令進行添加時區文件了,如下:
FROM golang:alpine as build RUN apk --no-cache add tzdata WORKDIR /app ADD . . RUN CGO_ENABLED=0 GOOS=linux go build -o myapp FROM scratch as final COPY --from=build /app/myapp . COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo ENV TZ=Asian/Shanghai CMD ["/myapp"]
我們通過命令RUN apk --no-cache add tzdata
添加時區文件,然后將其添加到最終鏡像中,最后通過ENV TZ
指定當前時區,這樣問題就解決了
但是,有時候公司的防火墻可能會屏蔽掉這些源,這樣執行RUN apk --no-cache add tzadd
時就會拉取不下來,那此時就需要其他的辦法找到時區文件了
幸運的是在golang
的庫中是包含時區文件的,位置在的$GOROOT/lib/time/zoneinfo.zip
,那么就可以直接將這個時區文件復制到image
當中了,如下:
FROM golang:alpine as build WORKDIR /app ADD . . RUN CGO_ENABLED=0 GOOS=linux go build -o myapp FROM scratch as final COPY --from=build /app/myapp . COPY --from=build /usr/local/go/lib/time/zoneinfo.zip / ENV TZ=Asian/Shanghai ENV ZONEINFO=/zoneinfo.zip CMD ["/myapp"]
在該dockerfile
中,我們使用ENV ZONEINFO
告訴golang
從哪取獲取時區文件,然后使用ENV TZ
指定當前的時區,這樣就能夠保證鏡像能夠讀取到正確的時區文件了
以上就是“怎么在golang鏡像中設置指定時區”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。