Docker Alpine镜像时区问题完美解决方案

最近在使用Docker 部署Java应用时发现时区不对,使用jdk获取当前时间慢8个小时用的是标准时区

解决方法:

方案1. 修改Dockerfile

设置Alpine linux系统时区 查找alpine linux的文档得知可以通过tzdata包来设置时区,在构建docker 镜像的时候,Dockerfile加上这句话:

RUN apk --update add tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    apk del tzdata && \
    rm -rf /var/cache/apk/*

完整的Dockerfile

FROM openjdk:8-jre-alpine3.9

RUN apk --update add tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    apk del tzdata && \
    rm -rf /var/cache/apk/*

# copy the packaged jar file into our docker image
COPY application.jar /application.jar

文档链接:

wiki.alpinelinux.org/wiki/Settin…

方案2. 设置JVM的系统默认时区

在启动Docker镜像的时候,通过设置user.timezone JVM环境变量来设置时区

java -jar -Duser.timezone=Asia/Shanghai app.jar

方案3. 将宿主机的时区文件挂载进Docker容器中

集群方案用的是K8S,部署时将宿主机的时区文件挂载进Docker容器中

apiVersion: apps/v1
kind: Deployment
metadata:
  name: SERVICE_NAME
spec:
  replicas: 1
  selector:
    matchLabels:
      app: SERVICE_NAME
  template:
    metadata:
      labels:
        app: SERVICE_NAME
    spec:
      containers:
      - name: SERVICE_NAME
        image: IMAGE_TAG
        imagePullPolicy: Always
        ports:
        - containerPort: 80
      	volumeMounts:
        - name: tz-config
          mountPath: /etc/localtime
      volumes:
      - name: tz-config
        hostPath:
           path: /etc/localtime

查看是否正常运行

date -R

参考文档:

quaded.com/docker-apli…

blog.csdn.net/jeikerxiao/…

到此这篇关于Docker Alpine镜像时区问题解决的文章就介绍到这了,更多相关Docker Alpine镜像时区内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于alpine用dockerfile创建的爬虫Scrapy镜像的实现

    一.下载alpine镜像 [root@DockerBrian ~]# docker pull alpine Using default tag: latest Trying to pull repository docker.io/library/alpine ... latest: Pulling from docker.io/library/alpine 4fe2ade4980c: Pull complete Digest: sha256:621c2f39f8133acb8e64023a94

  • Docker从零构建php-nginx-alpine镜像的方法

    虽然之前也曾用docker环境运行了一些项目,但对于镜像这块还不是很理解,且鉴于网上现成的镜像都包含太多用不到的库,所以决定从零开始构建一个自己的镜像. alpine linux为基础镜像 docker pull gliderlabs/alpine alpine linux 镜像地址 目前最新的tag是3.8版本,镜像只有4M的大小,非常的精简. 运行镜像 docker run -it gliderlabs/alpine 运行后可以看到里面有基本的linux文件系统,这里不做演示,有兴趣者可自行

  • 基于alpine用dockerfile创建的tomcat镜像的实现

    1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull repository docker.io/library/alpine ... latest: Pulling from docker.io/library/alpine 4fe2ade4980c: Pull complete Digest: sha256:621c2f39f8133acb8e64023a94dbd

  • Alpine Docker镜像字体的问题解决操作

    1.运行 fonts ,打开字体文件夹,找到要用的字体文件: 2.修改Dockerfile,例如: FROM alpine-jdk ADD ./test.jar /opt/App/test.jar #拷贝字体文件 COPY ./simhei.ttf /usr/share/fonts/simhei.ttf #设置字符集 ENV LANG en_US.UTF-8 #安装字体软件,完成字体配置 RUN apk add --update ttf-dejavu fontconfig && rm -r

  • Docker Alpine镜像时区问题完美解决方案

    最近在使用Docker 部署Java应用时发现时区不对,使用jdk获取当前时间慢8个小时用的是标准时区 解决方法: 方案1. 修改Dockerfile 设置Alpine linux系统时区 查找alpine linux的文档得知可以通过tzdata包来设置时区,在构建docker 镜像的时候,Dockerfile加上这句话: RUN apk --update add tzdata && \ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtim

  • docker下载镜像太慢的解决方案

    docker下载镜像卡死或太慢 找了网上很多方法,使用镜像中国也是下载卡死. 最后一种成功了,下载速度很满意 1.先再阿里云注册账号 不需要绑定什么,直接注册就可以了,有账号的直接登录就好. 地址:https://cr.console.aliyun.com 点击跳转 搜索 容器镜像服务 2.创建镜像仓库 3.创建好之后点到这个选项卡 在终端输入 vim /etc/docker/daemon.json 将"registry-mirrors": ["https://......c

  • Docker push镜像失败解决方法

    Docker push镜像失败的问题. 以下是输入push自己的tomcat后出现了失败 [root@slave3 ~]# docker push lekkoliu/tomcat8:latest The push refers to a repository [docker.io/lekkoliu/tomcat8] cefee3f6c961: Preparing 82f021d9c2b9: Preparing 4f91f02b4e49: Preparing a4b3ce7e1d4a: Prepa

  • 在alpine镜像中添加ansible服务的方法

    使用apk add ansible即可在alpine镜像中添加ansible服务. 添加步骤 在alpine中使用ansible需要如下几步 Dockerfile 在Dockerfile中添加上面的语句: #update apk for install RUN apk update #install ansible and openssh RUN apk add ansible openssh #init ansible hosts file RUN mkdir -p /etc/ansible

  • IDEA中Maven依赖下载失败的完美解决方案

    使用IDEA进行Maven项目开发时,时不时会遇到pom.xml报错的情况,其中很大概率是因为Maven依赖的jar包下载失败,找来找去也没有找到是什么问题,困扰了很多程序猿,这里给出IDEA中Maven依赖下载失败解决方案,给大家参考,实测有用. 文章目录首先检查网络有没有问题,确定网络没有问题,请看下一步多次点击重新导入Maven依赖的按钮设置自动导入Maven依赖在IDEA中找到Maven的配置文件的地址,然后检查配置的远程仓库或者镜像有没有问题如果上面几步都没有解决问题,可以使用以下脚本

  • AndroidStudio构建项目提示错误信息“unable to find valid certification”的完美解决方案

    手抖了一下,把AS升级到了最新版本,然后就悲剧了,公司的项目跑不起来,提示"unable to find valid certification",新建项目也是一样的提示.之前总结的解决方案都用了,没一个好使的,经过两个下午的折腾,终于还是被我整好了,感动的泪水都要流出来了 (╥╯^╰╥) 直接放我的最新解决方案,look~ 第一步:如下所示,在项目的build.gradle的两个repositories中添加阿里public镜像,最好放在google() 前面: buildscrip

  • docker安装Tomcat 404问题的解决方案

    查找tomcat的containerID,进入tomacat目录: [root@promote ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b52c4a46a432 nginx "/docker-entrypoin..." 4 minutes ago Up 4 minutes 0.0.0.0:8081->80/tcp nginx-test 02ffbf387631 tomcat "

  • 详解如何用alpine镜像做一个最小的镜像并运行c++程序

    需求 工作中我们如果要制作镜像,一般都是直接pull官方镜像,比如我们要运行一个c++程序我们可能直接pull一个gcc,或者ubuntu镜像就可以了,但是存在一个问题,我们只是要运行一个c++程序却要运行一个ubuntu系统,这是非常消耗资源的,所以就去网上搜了搜发现早期的docker都是使用alpine镜像来做基础镜像,所以就用alpile镜像来制作镜像 dockerfile FROM alpine:3.7 MAINTAINER Rethink #更新Alpine的软件源为国内(清华大学)的

  • Docker 查看镜像信息的方法

    本文中,我们将需要学习 Docker 如何查看镜像信息 一.images 命令列出镜像 通过使用如下两个命令,列出本机已有的镜像: docker images 或: docker image ls 如下图所示: 对上述红色标注的字段做一下解释: REPOSITORY: 来自于哪个仓库: TAG: 镜像的标签信息,比如 5.7.latest 表示不同的版本信息: IMAGE ID: 镜像的 ID, 如果您看到两个 ID 完全相同,那么实际上,它们指向的是同一个镜像,只是标签名称不同罢了: CREA

  • docker(alpine+golang) 中 hosts 不生效问题解决方法

    目录 一.问题 二.解决 方法一.增加配置 方法二.映射配置 方法三.修改镜像 知识点延伸 一.问题 把使用 golang 开发的服务程序部署在以 alpine 为基础镜像的容器中,设置了 /etc/hosts,却没有生效,但是在终端中使用 ping 和 curl 域名都可以正常访问. 二.解决 出现上述问题的根本原因是 DNS 解析顺序不一致导致的,在 alpine 中,linux 系统默认跳过 hosts 配置,直接使用机器的 DNS 服务.因此,有如下三种解决方法. 方法一.增加配置 修改

随机推荐