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。
![](https://img.haomeiwen.com/i13458329/9f8e76f788046749.png)
在宿主机时间正确的情况下
解决方案:修改docker容器的/etc/profile文件
......
export TZ='Asia/Shanghai'
添加环境变量,然后使用命令source /etc/profile使其生效
然后启动tomcat的时候会读取/etc/timzone来获取时区
docker exec -it tomcat bash
echo "Asia/Shanghai" > /etc/timezone
网友评论