[英]docker-compose: container timezone
我正在使用Docker Compose在我的開發環境中運行我的堆棧,但是我遇到了一個問題,即容器中的時區比我自己的時區晚了一個小時,破壞了關鍵任務,使開發變得非常困難。
我認為這將是一個普遍的問題,因此我進行了廣泛搜索,但是我發現的僅有的兩個解決方案不起作用(不起作用:無效)。
我已經嘗試了兩件事:
嘗試1-從主機符號鏈接卷
通過嘗試將/etc/timezone
和/etc/localtime
掛載為ro
-volumes,我希望該容器與主機具有相同的時區。 沒有效果。
嘗試2-在command
設置變量
我Dockerfile
讓Docker Compose使用我在ENTRYPOINT
指定的Dockerfile
,而是在Dockerfile
docker-compose.yml
-file中設置了command
,因此:
environment:
- APPLICATION_ENV=dev-docker
- TZ=Europe/Stockholm
build: ../../core/document
command: >
sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&
echo $TZ > /etc/timezone &&
exec /go/bin/documents"
同樣,完全沒有效果。
是否沒有在Docker容器中設置時區的官方方法? 我覺得這應該是比我更多的用戶的關鍵問題。
謝謝。
編輯 :根據dockerfile
來自core/documents
dockerfile
。
# This file is intended for use with the GitLab CI tool where the binary has already been built.
FROM golang:1.9.2
# The binary is built and downloaded to the current directory by GitLab CI.
COPY ./documents /go/bin
# Run the program.
ENTRYPOINT /go/bin/documents
我在時區方面也遇到了問題,這對我來說很有效:
environment:
- TZ=Europe/Stockholm
我看到我從來沒有正確回答這個問題。 我確實找到了解決方案。
TL; DR:
Alpine僅檢查/usr/share/zoneinfo/Europe/Stockholm
文件,而不檢查/etc/localtime
文件。
更長的答案
基本上,缺少的步驟是Alpine不檢查/etc/localtime
-path-它僅檢查/usr/share/zoneinfo/Europe/Stockholm
-path(更改為您的時區)。
就我而言,我決定采用一種可以說是非傳統的解決方案。 我想:
tzdata
包的大小是容器其余部分的兩倍; 基本圖像和二進制 apk tel tzdata
-command並不要以某種奇怪的rm
-way方式清理自己。 tzdata
軟件包與其他文件雜亂無章,也不要手動將內容寫入其中(除了符號鏈接) 因此,我決定安裝tzdata
,將我想要的時區復制到/etc/localtime
,然后為Alpine創建一個符號鏈接以仍然讀取該文件。
我的Dockerfile
有以下Dockerfile
:
RUN \
apk --update add curl bash nano tzdata && \
cp /usr/share/zoneinfo/Europe/Stockholm /etc/localtime && \
echo "Europe/Stockholm" > /etc/timezone && \
apk del tzdata && \
rm -r /var/cache/apk/* && \
mkdir -p /usr/share/zoneinfo/Europe && \
ln -s /etc/localtime /usr/share/zoneinfo/Europe/Stockholm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.