在docker里 ,乱码似乎是司空见惯的事情,容器封装的java应用,经常在输出日志中看到歪七扭八的"代码",即便LANG值为zh_CN.UTF-8。
而docker里的时区也是频繁,之前通过挂载系统中/etc/localtime解决容器级的时区,不过java应用也发现在日志中仍旧是UTC时间,一般容器时区准确了,也就没问题,如果还不行,尝试加上"-Duser.timezone=GMT+08"。
我说说我遇到的几种具体情况和解决方法吧。
1.tomcat
vim bin/catalina.sh
增加或修改以下内容
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"
2.netty
#!/bin/bash
export JAVA_HOME=/usr/java/jdk1.7.0_60
pid=/var/run/netty.pid
lib=/data/sspdsp/lib
export CLASSPATH=$CLASSPATH
conf=/data/sspdsp/conf
export LANG="en_US.UTF-8"
# Extra Java CLASSPATH elements.
for f in $lib/*.jar; do
if [ "$CLASSPATH" ]; then
export CLASSPATH=$CLASSPATH:$f
else
export CLASSPATH=$f
fi
done
$JAVA_HOME/bin/java -Xms1024m -Xmx2048m -Dfile.encoding=UTF8 -Duser.timezone=GMT+08 -cp $CLASSPATH com.emar.ssp.SspServer /data/sspdsp/conf/config.properties 200 &
echo $! > $pid
echo "ssp-creative start"
3.resin
resin 作为web服务器,根据启动方式的不同,可以修改以下某一个。
> resin.xml -Dfile.encoding=UTF-8
> resin.properties jvm_args : -Dfile.encoding=UTF-8
4.jar
非web应用,直接启动jar程序,采用supervisord守护进程的方式,配置的启动命令是:
command=java -jar -Xms2048m -Dfile.encoding=UTF-8 -Dspring.config.location=./app.properties app.jar