问题描述
使用下面的 Dockerfile 为 youlai-boot 项目制作镜像设置容器时区报错。
# 基础镜像 FROM openjdk:17-jdk-alpine # 时区修改 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
报错信息如下:
cp: can't stat '/usr/share/zoneinfo/Asia/Shanghai': No such file or directory
问题分析
因为基础镜像使用的是 openjdk:17-jdk-alpine
Alpine 是一个基于 musl libc 和 BusyBox 工具箱的轻量级 Linux 发行版。它被设计为尽可能简单和轻巧,以适应资源受限的环境,如容器。
Alpine基 础镜像中默认情况下可能不包含 tzdata 包,这可能导致在使用 /usr/share/zoneinfo/ 路径时出现问题。所以,你需要确保在 Alpine Linux 中安装了 tzdata 包,以便能够使用正确的时区信息。
解决方案
在设置时区前先安装 tzdata 包,具体是将下面错误的配置改成正确的配置。
错误的
# 基础镜像 FROM openjdk:17-jdk-alpine # 时区修改 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
正确的
# 基础镜像 FROM openjdk:17-jdk-alpine # 时区修改 RUN \ # 安装 tzdata 包设置时区 apk --no-cache add tzdata && \ # 复制 Asia/Shanghai 时区信息到 /etc/localtime cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone
容器时区验证
成功制作镜像且容器运行成功的时候,接下来验证容器的时区是否是上文所设置的 Asia/Shanghai ,具体步骤如下:
docker exec -it youlai-boot sh cat /etc/timezone
成功截图如下:
开源项目
- SpringCloud + Vue3 微服务商城
Github | Gitee | |
后端 | youlai-mall🍃 | youlai-mall🍃 |
前端 | mall-admin🌺 | mall-admin🌺 |
移动端 | mall-app🍌 | mall-app🍌 |
SpringBoot 3+ Vue3 单体权限管理系统
Github | Gitee | |
后端 | youlai-boot🍃 | youlai-boot🍃 |
前端 | vue3-element-admin🌺 | vue3-element-admin🌺 |