我有一个AWS EC2实例,我计划在MST晚上11:50打开,并在太平洋标准时间晚上11:59关闭。我已经将实例的时区设置为MST,这样我就可以在MST下午11:55运行一个cron作业来执行.sh文件。cron作业非常简单:55 23 * * * sudo bash docker run --mount type=bind,source="/home/ec2-user/environment/Project",target="/Project" myubuntu
。docker将安装到本地文件夹";项目";它包含一个.cpp文件,该文件通过web从Steam的用户信息页面中抓取数据。.cpp文件中的代码非常依赖于当前的时间/日期,因此我花了这么多工作来让所有东西都在MST中运行,这样所有东西都是标准的。然而,即使所有东西都在MST上运行,当docker容器运行时,它不在MST中,尽管dockerfile声明使用ENV TZ="America/Salt Lake City"
运行,但我后来将其从盐湖城更改为Phoenix,只是为了尝试一下,但它仍然没有在MST运行docker。例如,当我在MST 11月24日晚上9:22运行docker时,docker中的日期是UTC 11月25日上午04:22。这个微小的日期和时间变化极大地影响了我试图运行的代码。
为了解释代码的作用,Steam有一个.json URL,它在";[unix epoch时间,#用户登录]";。目标是自动化,所以我想如果我让代码去掉任何与代码运行日期不匹配的数据,它就不会包含在数据收集中。因此,我通过在每天的最后运行代码,一次收集24小时的数据。我和我的EC2实例运行的MST时间与我的docker运行的UTC时间之间的日期/时间差异导致了数据收集问题。
我的教授给了我一份dockerfile,据说它是为在MST上运行而设置的,但据我所知,它并不存在。我尝试在包含-v /etc/timezone:/etc/timezone
的.sh文件中运行我的命令,但这似乎也不能解决时区问题。我收到的码头文件如下:
# This image will be based on the ubuntu image. Build it using the
# command in the comment below. You may omit the ubuntu pull if you already
# did it. Before running the build, change into the directory containing
# this Dockerfile.
FROM ubuntu
# Set a default shell.
SHELL ["/bin/bash", "-c"]
# The timezone library stops the docker build and waits for user input to
# select a timezone. This breaks the build. To get around this,
# set up timezone information prior to installing that library. This
# Docker code does that. Composited from two sources:
# https://rtfm.co.ua/en/docker-configure-tzdata-and-timezone-during-build/
# https://serverfault.com/questions/949991/how-to-install-tzdata-on-a-ubuntu-docker-image
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ="America/Phoenix"
# Install a handful of useful libraries. Note that this is generally against
# best practices -- containers should be lean, and not include 'things you
# might use'. In our case, we're using the containers for development, so
# this may be reasonable here.
RUN apt-get -y update && apt-get -y install
apt-utils
emacs-nox
g++
# Copy in the files from the current folder (recursively) For our purposes,
# put them in /cs3505
COPY . /cs3505
RUN apt-get -y install wget
是不是我或我的教授在设置docker时做错了什么,导致了这个时区问题?我该如何修复我的docker,以便每次它在MST晚上11:55运行时,都以MST为时区打开?
编辑:我不知道这是否有区别,但运行CCD_;美国/山地;并且运行CCD_ 5显示了相同的事情。
这是我基于Debian定制的dockerfile,可以参考一下:
FROM debian:stable-slim
ARG ARG_TIMEZONE=Asia/Shanghai
ENV ENV_TIMEZONE ${ARG_TIMEZONE}
# install base dependence
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
&& apt-get update && apt-get install -y -q
dialog apt-utils
locales systemd cron
vim wget curl exuberant-ctags tree
tzdata ntp ntpstat ntpdate
&& apt-get clean && apt-get autoremove -y && rm -rf /var/lib/apt/lists/*
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
# sync timezone
RUN echo '$ENV_TIMEZONE' > /etc/timezone
&& ln -fsn /usr/share/zoneinfo/$ENV_TIMEZONE /etc/localtime
&& dpkg-reconfigure --frontend noninteractive tzdata