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 🌎
相关推荐
青州从事5217 小时前
20260108【mac】【brew】【docker】安装
macos·docker·eureka
菜鸟思维9 小时前
优化NextJs 项目的Docker 镜像 从3.62G 优化到 296.85M
docker
怣疯knight9 小时前
Docker Desktop 4.55.0版本安装成功教程
windows·docker
东方佑10 小时前
使用Docker Compose一键部署OnlyOffice:完整指南与配置解析
运维·docker·容器
赵文宇(温玉)10 小时前
Docker的价值、特点、创新与关键技术
运维·docker·容器
Coder码匠12 小时前
Docker Compose 部署 Spring Boot 应用完全指南
spring boot·docker·容器
可爱又迷人的反派角色“yang”12 小时前
k8s(二)
linux·运维·docker·云原生·容器·kubernetes·云计算
计算机小手13 小时前
内网穿透系列十六:使用 wg-easy 快速搭建基于 wireguard 的虚拟局域网,支持Docker部署
经验分享·网络协议·docker·开源软件
旧日之血_Hayter13 小时前
docker部署项目,/var/lib/docker/overlay2目录满了如何清理?
运维·docker·容器