cp: can‘t stat ‘/usr/share/zoneinfo/Asia/Shanghai‘: No such file or directory

目录

问题描述

使用下面的 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 🌎
相关推荐
Yyyy4821 小时前
容器化技术
docker
送秋三十五3 小时前
Docker 构建教程:学习上下文、架构和性能优化技术
学习·docker·架构
yannan2019031313 小时前
Docker容器
运维·docker·容器
小宁爱Python14 小时前
Windows Docker Desktop占用C盘空间过大解决办法集合
运维·docker·容器
JAVA学习通14 小时前
发布自己的 jar 包到 Maven 中央仓库 ( mvnrepository.com )
人工智能·docker·自然语言处理·容器·rocketmq
木亦汐丫17 小时前
Docker 镜像版本Alpine、Slim、Bookworm、Bullseye、Stretch、Jessie
运维·docker·容器·debian·alpine·slim·bullseye
中草药z19 小时前
【Docker】零基础上手:原理+Ubuntu/Windows GUI 安装 + 镜像源 / 目录优化
运维·ubuntu·docker·容器·gui·安装·cgroups
勇往直前plus19 小时前
如何利用docker部署springboot应用
spring boot·docker·容器
有谁看见我的剑了?1 天前
k8s storageclasses nfs-provisioner 部署
docker·容器·kubernetes
忧郁的橙子.1 天前
安装插件遇到报错时间错误导致签证失败 Errors during downloading metadata for repository ‘baseos‘:
docker