美文网首页
docker tomcat 日志时间时区不对

docker tomcat 日志时间时区不对

作者: sunland_0416 | 来源:发表于2020-11-27 15:38 被阅读0次

    docker 启动时已经采用了-v /etc/localtime:/etc/localtime:ro来同步宿主机时间跟docker容器时间,但是发现docker 容器内Tomcat日志时间仍然不是宿主机时间,
    检查下java环境的配置

    java -XshowSettings
    

    可以看到java配置

    C:\Users\root>java -XshowSettings
    Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
    VM settings:
        Max. Heap Size (Estimated): 1.75G
        Ergonomics Machine Class: client
        Using VM: Java HotSpot(TM) 64-Bit Server VM
    
    Property settings:
        awt.toolkit = sun.awt.windows.WToolkit
        file.encoding = UTF-8
        file.encoding.pkg = sun.io
        file.separator = \
        java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment
        java.awt.printerjob = sun.awt.windows.WPrinterJob
        java.class.path = .
        java.class.version = 52.0
        java.endorsed.dirs = C:\Program Files\Java\jre1.8.0_191\lib\endorsed
        java.ext.dirs = C:\Program Files\Java\jre1.8.0_191\lib\ext
            C:\WINDOWS\Sun\Java\lib\ext
        java.home = C:\Program Files\Java\jre1.8.0_191
        java.io.tmpdir = C:\Users\root\AppData\Local\Temp\
        java.library.path = C:\Program Files (x86)\Common Files\Oracle\Java\javapath
            C:\WINDOWS\Sun\Java\bin
            C:\WINDOWS\system32
            C:\WINDOWS
            C:\Program Files (x86)\Common Files\Oracle\Java\javapath
            C:\ProgramData\Oracle\Java\javapath
            D:\Python3\Scripts\
            D:\Python3\
            C:\Program Files (x86)\Intel\iCLS Client\
            C:\Program Files\Intel\iCLS Client\
            C:\Windows\system32
            C:\Windows
            C:\Windows\System32\Wbem
            C:\Windows\System32\WindowsPowerShell\v1.0\
            C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
            C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL
            C:\Program Files\Intel\Intel(R) Management Engine Components\DAL
            C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT
            C:\Program Files\Intel\Intel(R) Management Engine Components\IPT
            C:\Program Files\Intel\WiFi\bin\
            C:\Program Files\Common Files\Intel\WirelessCommon\
            C:\WINDOWS\system32
            C:\WINDOWS
            C:\WINDOWS\System32\Wbem
            C:\WINDOWS\System32\WindowsPowerShell\v1.0\
            C:\WINDOWS\System32\OpenSSH\
            D:\Program Files\nodejs\
            C:\WINDOWS\system32
            C:\WINDOWS
            C:\WINDOWS\System32\Wbem
            C:\WINDOWS\System32\WindowsPowerShell\v1.0\
            C:\WINDOWS\System32\OpenSSH\
            C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR
            C:\Program Files\Docker\Docker\resources\bin
            C:\ProgramData\DockerDesktop\version-bin
            C:\Users\cbhbit\AppData\Local\Microsoft\WindowsApps
            D:\Program Files\Docker Toolbox
            C:\Users\cbhbit\AppData\Roaming\npm
            D:\Program Files\Fiddler
            C:\Users\cbhbit\AppData\Local\Microsoft\WindowsApps
            D:\ChangZhi\dnplayer2
            D:\tools
            D:\Program Files\Tesseract-OCR
    
            .
        java.runtime.name = Java(TM) SE Runtime Environment
        java.runtime.version = 1.8.0_191-b12
        java.specification.name = Java Platform API Specification
        java.specification.vendor = Oracle Corporation
        java.specification.version = 1.8
        java.vendor = Oracle Corporation
        java.vendor.url = http://java.oracle.com/
        java.vendor.url.bug = http://bugreport.sun.com/bugreport/
        java.version = 1.8.0_191
        java.vm.info = mixed mode
        java.vm.name = Java HotSpot(TM) 64-Bit Server VM
        java.vm.specification.name = Java Virtual Machine Specification
        java.vm.specification.vendor = Oracle Corporation
        java.vm.specification.version = 1.8
        java.vm.vendor = Oracle Corporation
        java.vm.version = 25.191-b12
        line.separator = \r \n
        os.arch = amd64
        os.name = Windows 10
        os.version = 10.0
        path.separator = ;
        sun.arch.data.model = 64
        sun.boot.class.path = C:\Program Files\Java\jre1.8.0_191\lib\resources.jar
            C:\Program Files\Java\jre1.8.0_191\lib\rt.jar
            C:\Program Files\Java\jre1.8.0_191\lib\sunrsasign.jar
            C:\Program Files\Java\jre1.8.0_191\lib\jsse.jar
            C:\Program Files\Java\jre1.8.0_191\lib\jce.jar
            C:\Program Files\Java\jre1.8.0_191\lib\charsets.jar
            C:\Program Files\Java\jre1.8.0_191\lib\jfr.jar
            C:\Program Files\Java\jre1.8.0_191\classes
        sun.boot.library.path = C:\Program Files\Java\jre1.8.0_191\bin
        sun.cpu.endian = little
        sun.cpu.isalist = amd64
        sun.desktop = windows
        sun.io.unicode.encoding = UnicodeLittle
        sun.java.launcher = SUN_STANDARD
        sun.jnu.encoding = GBK
        sun.management.compiler = HotSpot 64-Bit Tiered Compilers
        sun.os.patch.level =
        sun.stderr.encoding = ms936
        sun.stdout.encoding = ms936
        user.country = CN
        user.dir = C:\Users\root
        user.home = C:\Users\root
        user.language = zh
        user.name = root
        user.script =
        user.timezone =
        user.variant =
    
    Locale settings:
        default locale = 中文
        default display locale = 中文 (中国)
        default format locale = 中文 (中国)
        available locales = , ar, ar_AE, ar_BH, ar_DZ, ar_EG, ar_IQ, ar_JO,
            ar_KW, ar_LB, ar_LY, ar_MA, ar_OM, ar_QA, ar_SA, ar_SD,
            ar_SY, ar_TN, ar_YE, be, be_BY, bg, bg_BG, ca,
            ca_ES, cs, cs_CZ, da, da_DK, de, de_AT, de_CH,
            de_DE, de_GR, de_LU, el, el_CY, el_GR, en, en_AU,
            en_CA, en_GB, en_IE, en_IN, en_MT, en_NZ, en_PH, en_SG,
            en_US, en_ZA, es, es_AR, es_BO, es_CL, es_CO, es_CR,
            es_CU, es_DO, es_EC, es_ES, es_GT, es_HN, es_MX, es_NI,
            es_PA, es_PE, es_PR, es_PY, es_SV, es_US, es_UY, es_VE,
            et, et_EE, fi, fi_FI, fr, fr_BE, fr_CA, fr_CH,
            fr_FR, fr_LU, ga, ga_IE, hi, hi_IN, hr, hr_HR,
            hu, hu_HU, in, in_ID, is, is_IS, it, it_CH,
            it_IT, iw, iw_IL, ja, ja_JP, ja_JP_JP_#u-ca-japanese, ko, ko_KR,
            lt, lt_LT, lv, lv_LV, mk, mk_MK, ms, ms_MY,
            mt, mt_MT, nl, nl_BE, nl_NL, no, no_NO, no_NO_NY,
            pl, pl_PL, pt, pt_BR, pt_PT, ro, ro_RO, ru,
            ru_RU, sk, sk_SK, sl, sl_SI, sq, sq_AL, sr,
            sr_BA, sr_BA_#Latn, sr_CS, sr_ME, sr_ME_#Latn, sr_RS, sr_RS_#Latn, sr__#Latn,
            sv, sv_SE, th, th_TH, th_TH_TH_#u-nu-thai, tr, tr_TR, uk,
            uk_UA, vi, vi_VN, zh, zh_CN, zh_HK, zh_SG, zh_TW
    
    用法: java [-options] class [args...]
               (执行类)
       或  java [-options] -jar jarfile [args...]
               (执行 jar 文件)
    其中选项包括:
        -d32          使用 32 位数据模型 (如果可用)
        -d64          使用 64 位数据模型 (如果可用)
        -server       选择 "server" VM
                      默认 VM 是 server.
    
        -cp <目录和 zip/jar 文件的类搜索路径>
        -classpath <目录和 zip/jar 文件的类搜索路径>
                      用 ; 分隔的目录, JAR 档案
                      和 ZIP 档案列表, 用于搜索类文件。
        -D<名称>=<值>
                      设置系统属性
        -verbose:[class|gc|jni]
                      启用详细输出
        -version      输出产品版本并退出
        -version:<值>
                      警告: 此功能已过时, 将在
                      未来发行版中删除。
                      需要指定的版本才能运行
        -showversion  输出产品版本并继续
        -jre-restrict-search | -no-jre-restrict-search
                      警告: 此功能已过时, 将在
                      未来发行版中删除。
                      在版本搜索中包括/排除用户专用 JRE
        -? -help      输出此帮助消息
        -X            输出非标准选项的帮助
        -ea[:<packagename>...|:<classname>]
        -enableassertions[:<packagename>...|:<classname>]
                      按指定的粒度启用断言
        -da[:<packagename>...|:<classname>]
        -disableassertions[:<packagename>...|:<classname>]
                      禁用具有指定粒度的断言
        -esa | -enablesystemassertions
                      启用系统断言
        -dsa | -disablesystemassertions
                      禁用系统断言
        -agentlib:<libname>[=<选项>]
                      加载本机代理库 <libname>, 例如 -agentlib:hprof
                      另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
        -agentpath:<pathname>[=<选项>]
                      按完整路径名加载本机代理库
        -javaagent:<jarpath>[=<选项>]
                      加载 Java 编程语言代理, 请参阅 java.lang.instrument
        -splash:<imagepath>
                      使用指定的图像显示启动屏幕
    有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
    
    
    java时区.png

    在宿主机时间正确的情况下
    解决方案:修改docker容器的/etc/profile文件

    ......
    export TZ='Asia/Shanghai'
    

    添加环境变量,然后使用命令source /etc/profile使其生效

    然后启动tomcat的时候会读取/etc/timzone来获取时区

    docker exec -it tomcat bash
    echo "Asia/Shanghai" > /etc/timezone
    

    相关文章

      网友评论

          本文标题:docker tomcat 日志时间时区不对

          本文链接:https://www.haomeiwen.com/subject/mcmxwktx.html