目录
问题描述
使用下面的 Dockerfile 为 youlai-boot 项目制作镜像设置容器时区报错。
shell
# 基础镜像
FROM openjdk:17-jdk-alpine
# 时区修改
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
报错信息如下:
bash
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 包,具体是将下面错误的配置改成正确的配置。
- 错误的
shell
# 基础镜像
FROM openjdk:17-jdk-alpine
# 时区修改
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
- 正确的
shell
# 基础镜像
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
,具体步骤如下:
bash
docker exec -it youlai-boot sh
cat /etc/timezone
成功截图如下:
开源项目
微服务商城项目
Github | Gitee | |
---|---|---|
开源组织 | 有来开源组织 | 有来开源组织 |
后端 | youlai-mall 📖 | youlai-mall 📖 |
前端 | mall-admin🌎 | mall-admin 🌎 |
移动端 | mall-app 🌎 | mall-app 🌎 |
前后端分离项目
Github | Gitee | |
---|---|---|
开源组织 | 有来开源组织 | 有来开源组织 |
后端 | youlai-boot 📖 | youlai-boot 📖 |
前端 | vue3-element-admin 🌎 | vue3-element-admin 🌎 |