/ Docker

让docker中的时区与主机保持一致

我们每次默认创建的docker,时区都会与主机不同,因为linux使用/etc/timezone与/etc/localtime来记录时区,而docker拥有单独的一整套系统套件,所以时区也是单独的。为了让docker与host的时区同步,我们只需将这两个文件映射进docker即可。
docker-compose写法:

    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro

经过使用,我发现上门的方法还有很大局限性:

  • 要求docker host必须为linux系统,并且正确的设置了时区
  • 如果docker镜像为像alpine这类轻量镜像,没有预装tzdata包,则无效

所以可以使用以下方法来解决:
Dockerfile:

# install tzdata
RUN apk add --no-cache tzdata

# set timezone
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone