Docker作为一款优秀的开源容器管理工具,能够帮助开发者一键式地在各个平台上运行自己的应用而无需考虑环境兼容问题,已经成为目前主流的应用部署方案。
在使用Docker容器时,可能碰到的一个问题是时区的设置,因为Docker容器内默认的时区是UTC,这一点可以通过date
命令来验证。分别在宿主机和Docker容器内运行date
命令,观察两者的输出是否相同
$ date
2018年10月29日 星期一 08时47分17秒 CST
$ docker run -it ubuntu /bin/bash
root@367851bfa10f:/# date
Mon Oct 29 00:48:09 UTC 2018
可以看到,宿主机使用的是UTC+8时间,而Docker容器内使用的是UTC时间。大多数应用开发者通常希望使用UTC+8时间,因此我们需要在Docker中重新设置时区。以ubuntu镜像为例,我们可以通过如下的Dockerfile
来完成时区的设置
FROM ubuntu
RUN apt-get update
RUN export DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y tzdata=2018d-1
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN dpkg-reconfigure -f noninteractive tzdata
WORKDIR /app
ADD . /app
大体来说就是,我们需要在ubuntu镜像中安装tzdate
软件包,然后进行软链接,再重新执行时区的设置。值得注意的是,在设置时区时只有Asia/Shanghai
的选项而没有Asia/Beijing
的选项,所以这里不要想当然地写错了。我们可以通过docker build
命令生成对应的镜像,运行该镜像以观察效果。新建一个文件夹,将这个Dockerfile
移到该文件夹下,然后执行以下命令
$ docker build -t timezone:v1 .
...
Successfully built 0262dcc4daa5
Successfully tagged timezone:v1
$ docker run -it timezone:v1 /bin/bash
root@11eb9259d038:/app# date
Mon Oct 29 09:05:44 CST 2018
可以看到,Docker镜像中的时区修改为了UTC+8时间,大功告成!
参考链接:https://stackoverflow.com/questions/44331836/apt-get-install-tzdata-noninteractive
以上就是本文的全部内容,如果您喜欢这篇文章,欢迎将它分享给朋友们。
感谢您的阅读,祝您生活愉快!
作者:小美哥
2018-10-29