在执行 Maven 容器时,如果发现打印的时间与期望的时间不一致,可能是因为 Maven 容器的时区设置不正确。可以通过以下几种方式设置容器的时区:
方法一:通过环境变量设置时区
最常见的方式是通过设置 TZ 环境变量,来修改容器的时区。例如,如果你想将时区设置为 Asia/Shanghai,可以在 Docker 容器的配置中添加 TZ 环境变量:
docker run -e TZ=Asia/Shanghai maven:3.6.3-jdk-11 mvn clean install
或者,如果是在 docker-compose.yml 文件中设置:
version: '3'
services:
maven:
image: maven:3.6.3-jdk-11
environment:
- TZ=Asia/Shanghai
volumes:
- ./:/app
working_dir: /app
command: mvn clean install
方法二:通过挂载宿主机的时区文件
你也可以直接挂载宿主机的时区文件到容器中,这样容器会使用和宿主机相同的时区:
docker run -v /etc/localtime:/etc/localtime:ro maven:3.6.3-jdk-11 mvn clean install
方法三:修改 Dockerfile
如果你有自己的 Dockerfile,可以在其中配置时区。通过安装 tzdata 包并设置时区,示例如下:
FROM maven:3.6.3-jdk-11
RUN apt-get update && \
apt-get install -y tzdata && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata
方法四:在 CI/CD 中设置时区
如果你是在 CI/CD 环境中使用容器(例如在 Jenkins、GitLab CI 等平台上),也可以通过在 CI 配置文件中设置时区环境变量,或者在构建脚本中手动调整时区。例如,在 Jenkins Pipeline 中:
pipeline {
agent any
environment {
TZ = "Asia/Shanghai"
}
stages {
stage('Build') {
steps {
sh 'mvn clean install'
}
}
}
}
方法五:通过 JVM 参数调整时区
如果 Maven 构建过程使用的 Java 进程的时区不正确,还可以通过 JVM 参数来指定时区:
mvn clean install -Duser.timezone=Asia/Shanghai
这种方式可以直接在命令行执行,也可以在 Maven 配置文件(pom.xml 或 CI 配置)中添加。