gpt4 book ai didi

python - 如何使用 gliderlabs/alpine :3. 3 在 Dockerfile 中设置时区

转载 作者:IT老高 更新时间:2023-10-28 21:43:38 27 4
gpt4 key购买 nike

我的 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,如issue 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

(和 I referred before to a similar solution )


另一种选择是使用 gliderlabs/docker-alpine 构建您自己的 builder/scripts/mkimage-alpine.bash 图像。

该脚本允许您 set a timezone

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

您可以看到 Digital Ocean: Alpine Linux 中使用的图像构建器脚本:

Generate Alpine root file system

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

    wget -O docker-alpine-master.zip https://github.com/gliderlabs/docker-alpine/archive/master.zip
    unzip docker-alpine-master.zip
  • 构建构建器 (export the right timezone first)。

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

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

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

在您自己的文件系统上拥有 rootfs.tar.gz 后,您可以使用它(作为 mentioned here )通过以下 Dockerfile 构建您自己的 Alpine 镜像:

FROM SCRATCH
ADD rootfs.tar.gz /

构建后,您可以使用具有正确时区的 Alpine 镜像。

关于python - 如何使用 gliderlabs/alpine :3. 3 在 Dockerfile 中设置时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34972521/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com