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

2024-04-26

我的 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

and

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

它们都不起作用,如何设置时区?非常感谢。


通常的解决方法是安装/etc/localtime, as in 问题 3359 https://github.com/docker/docker/issues/3359#issuecomment-38134906

$ 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

(And 我之前提到过类似的解决方案 https://serverfault.com/a/683606/783)


另一种选择是构建自己的gliderlabs/docker-alpine https://github.com/gliderlabs/docker-alpine/图像与builder/scripts/mkimage-alpine.bash https://github.com/gliderlabs/docker-alpine/blob/3fe0456981e67f140b0d441e367838105e30fd2e/builder/scripts/mkimage-alpine.bash#L18.

该脚本允许您设置时区 https://github.com/gliderlabs/docker-alpine/blob/3fe0456981e67f140b0d441e367838105e30fd2e/builder/scripts/mkimage-alpine.bash#L47-L48.

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

您可以看到图像生成器脚本用于数字海洋:Alpine Linux https://github.com/bontibon/digitalocean-alpine:

生成Alpine根文件系统

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

    wget -O docker-alpine-master.zip https://github.com/gliderlabs/docker-alpine/archive/master.zip
    unzip docker-alpine-master.zip
    
  • 构建构建器 (首先导出正确的时区 https://mm.icann.org/pipermail/tz/2001-April/011541.html).

    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在您自己的文件系统上,您可以使用它(如这里提到 https://hashnode.com/post/how-do-you-build-your-own-docker-image-with-zero-dependencies-cim0utz0g01qygb533ixw7xnf)使用以下 Dockerfile 构建您自己的 Alpine 镜像:

FROM SCRATCH
ADD rootfs.tar.gz /

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 gliderlabs/alpine:3.3 在 Dockerfile 中设置时区 的相关文章

随机推荐

  • 画布绘制文本定位

    我正在创建一个绘图工具 用户可以在其中向图像添加文本 当通过画布位置将文本绘制到位图时 未正确设置 Paint paint new Paint paint setStyle Paint Style FILL paint setColor C
  • 如何使用没有按钮的 jQuery UI 图标?

    jQuery UI 带有一些很好的图标 没有按钮我该如何使用它们 让我们说一下如何创建链接plus签名并通过更改图标对悬停和单击做出反应 Here http jsfiddle net and7ey gZQzt 是仅添加图标的演示 Upd 1
  • python 遍历文件中的行

    我见过这两种处理文件的方法 file open file txt for line in file do something file open file txt contents file read for line in content
  • 无与伦比的括号宏怪异

    根据 C99 规则预处理以下 3 行的正确输出是什么 define y x x define x a y a x 1 x 2 顺便说一句 linux 下的 cpp 会产生错误消息 但我不明白为什么答案不简单 1 2 假设 cpp 是正确的而
  • 以编程方式自动填充 UAC 详细信息

    有没有办法通过编程方式在 Visa 中自动填写 UAC 登录名和密码 例如 出现UAC提示 您的程序会自动为您填写该信息 例如 一个程序会在 UAC 提示符中使用管理员用户名和密码自动填充该信息 SendKeys 无法将输入键发送到 UAC
  • 如何在 Inno Setup 中为控件卷出设置动画

    我想在我的安装程序中制作控件滚动的动画 你可以看这个视频 https drive google com file d 1H0HKTPXg9BdYD4HQWqCWHlGSTIHlcJa view 您可以使用计时器来为控件设置动画 Code f
  • 知道axios中是否有待处理的请求

    我是 ReactJS 的新手 对于我的 ajax 调用 我尝试使用Axios https github com mzabriskie axios图书馆 太棒了 但现在我想知道是否有办法知道 axios 拦截器中是否有待处理的请求 因为我想显
  • 单击旁边的按钮时如何引用动态创建的标签 [Qt]

    每次按下 添加客户端 按钮时 减号按钮 客户端名称 客户端计数器和加号按钮都会以水平线添加到网格布局中 我想在按下加号 减号按钮时更新计数 QLabel 这是我的代码 include widget h include ui widget h
  • Flask-PyMongo collMod

    我正在尝试使用 PyMongo 更新 TTL 集合 试图运行这个我得到 失败没有这样的命令 索引 client db command collMod url index keyPattern dateCreated 1 expireAfte
  • 什么是二叉搜索树中的“内部节点”?

    我正在互联网上搜索 内部节点 一词的定义 我找不到简洁的定义 我正在查看的每个来源都使用该术语但没有定义它 并且这种用法并不能产生内部节点实际是什么的正确定义 这是我主要看的两个地方 Link https planetmath org Ex
  • Solr 中的多值字段排序

    我有一个 Solr 索引 将每个产品的价格存储在多值字段中 我需要按价格对结果集进行排序 其中价格从低到高 从高到低 我尝试对价格进行排序 它显示错误您无法对 multivalued True 字段进行排序 下面是我的 solr XML
  • Javadoc 错误 - java.lang.reflect.InitationTargetException

    我正在尝试从 yDoc 库生成 uml 图 它基本上使用 Javadoc 来解析 Java 源文件 但是 当我尝试从终端 OS X 执行命令时 出现以下错误 javadoc error In doclet class ydoc doclet
  • C++ - 通过添加字节整数来向前移动 char 指针是否合法/推荐?

    我正在寻找一些方法来将指针推进到压缩档案中的文件开头 我有一个指向已读入内存的文件开头的字符指针 归档目录包含每个文件的偏移量 是否合法 建议这样说 char beginning Imagine this is assigned to th
  • Azure API 管理:原始标头丢失或为空,并且请求被分类为非跨域。未应用 CORS 政策

    我正在使用 Azure API 管理 并且需要使用它来管理三个 API 测试时 GET 方法工作正常 但是 post 方法出现以下错误 原始标头丢失或为空 并且请求被归类为非跨域 未应用 CORS 政策 我进行了搜索并发现了一些 CORS
  • Apache Camel:如何存储变量以供以后使用

    在使用 Spring DSL 玩 Camel 时 我遇到了以下问题 假设预期的消息流如下所示 客户端将带有 XML 正文的 HTTP POST 消息发送给 CAMEL CAMEL 向服务器代理 HTTP POST 消息 并使用稍微调整的 U
  • 从 uiwebview Xcode 获取选定的文本

    我有一个UIWebView从加载文本htmlString 我需要当用户选择文本的一部分并按下按钮时 我将能够提取它以便在其他地方使用它 所以我使用以下代码 The JS File NSString filePath NSBundle mai
  • 根据单元格位置将选择性字段从 Excel 批量插入到 SQL

    我有一个 SSIS 包 我必须从 Excel 工作表中选择一些值并将它们插入到 SQL Server 数据库表中 我是通过执行 sql 任务来完成的 这些是步骤 从映射表中选择所有记录 单元格位置是动态的 因此将其保留在 SQL 表中 大约
  • 如何使用 Keras 将图像文件夹转换为 X 和 Y 批次?

    假设我有一个图像文件夹 例如 PetData Dog images Cat images 我如何将其转换为 x train y train x test y test 格式 我看到这种格式广泛用于 MNIST 数据集 如下所示 mnist
  • 如何与多个 ViewModel 共享多个 ObservableCollections?

    我正在编写一个有 4 个视图的程序 公司视图 会员查看 周视图 and 报告查看 每个都有对应的ViewModel和Model 我使用 PRISM BindableBase 来创建 ViewModel 数据绑定正确 公司视图模型包含一个对象
  • 如何使用 gliderlabs/alpine:3.3 在 Dockerfile 中设置时区

    我的 Dockerfile 是 FROM gliderlabs alpine 3 3 RUN set x buildDeps python dev py pip build base apk update add python py lxm