如何使用gliderlabs / alpine设置Dockerfile中的时区:3.3

我的Dockerfile是:

FROM gliderlabs/alpine:3.3 RUN set -x \ && buildDeps='\ python-dev \ py-pip \ build-base \ ' \ && apk --update add python py-lxml py-mysqldb $buildDeps \ && rm -rf /var/cache/apk/* \ && mkdir -p /app ENV INSTALL_PATH /app ENV TZ=Asia/Shanghai WORKDIR $INSTALL_PATH RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone COPY requirements-docker.txt ./ RUN pip install -r requirements-docker.txt COPY . . RUN apk del --purge $buildDeps ENTRYPOINT ["celery", "-A", "tasks", "worker", "-l", "info", "-B"] 

我把时区设置为Asia/Shanghai ,但是没有工作,给了我8个小时偏差的UTC,结果是:

 2016-01-24 11:25:07:[2016-01-24 03:25:07,893: WARNING/Worker-2] 2016-01-24 03:25:07.892718 2016-01-24 11:25:08:[2016-01-24 03:25:08,339: INFO/MainProcess] Task tasks.crawl[98c9a9fc-0817-45cb-a2fc-40320d63c41a] succeeded in 0.447403368002s: None 2016-01-24 11:27:07:[2016-01-24 03:27:07,884: INFO/Beat] Scheduler: Sending due task spider (tasks.crawl) 

然后我尝试了其他方法,如:

 RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata 

 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

他们都没有工作,如何设置时区? 非常感谢。

通常的解决方法是挂载/etc/localtime ,如问题3359

 $ docker run --rm busybox date Thu Mar 20 04:42:02 UTC 2014 $ docker run --rm -v /etc/localtime:/etc/localtime:ro busybox date Thu Mar 20 14:42:20 EST 2014 $ FILE=$(mktemp) ; echo $FILE ; echo -e "Europe/Brussels" > $FILE ; docker run --rm -v $FILE:/etc/timezone -v /usr/share/zoneinfo/Europe/Brussels:/etc/localtime:ro busybox date /tmp/tmp.JwL2A9c50i Thu Mar 20 05:42:26 CET 2014 

同样的线程提到(虽然基于Ubuntu的图像),但你已经尝试过了。

 RUN echo Europe/Berlin > /etc/timezone && dpkg-reconfigure --frontend noninteractive tzdata 

( 我之前提到过类似的解决scheme )


另一种select是用builder/scripts/mkimage-alpine.bash自己的gliderlabs/docker-alpine图片。

该脚本允许您设置时区 。

  [[ "$TIMEZONE" ]] && \ cp "/usr/share/zoneinfo/$TIMEZONE" "$rootfs/etc/localtime" 

您可以看到数字海洋中使用的图像生成器脚本:Alpine Linux :

生成阿尔卑斯山根文件系统

  • 确保Docker在本地运行。
  • 下载并解压gliderlabs/docker-alpine

     wget -O docker-alpine-master.zip https://github.com/gliderlabs/docker-alpine/archive/master.zip unzip docker-alpine-master.zip 
  • build立构build器(首先输出正确的时区 )。

     export TIMEZONE=xxx docker build -t docker-alpine-builder docker-alpine-master/builder/ 
  • 构build根文件系统(将v3.3更改为要构build的Alpine版本)。

     docker run --name alpine-builder docker-alpine-builder -r v3.4 
  • 复制容器中的根文件系统。

     docker cp alpine-builder:/rootfs.tar.gz . 

一旦你在自己的文件系统上有了rootfs.tar.gz ,你可以使用它(如下所述 )来构build你自己的Alpine镜像,使用下面的Dockerfile:

 FROM SCRATCH ADD rootfs.tar.gz / 

一旦build成,你可以使用正确的时区的高山形象。

// dockerfile

 RUN apk update && apk add tzdata \ && cp -r -f /usr/share/zoneinfo/YOUR_TIMEZONE /etc/localtime