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 🌎
相关推荐
网络小白不怕黑5 小时前
Docker容器网络:四大模式解析与自定义网络
运维·docker·容器
gwd2009 小时前
如何快速设置 Docker 代理设置
运维·人工智能·docker·容器
一苓二肆10 小时前
代码常用工具使用
git·vscode·docker·github·vim
weixin_5214311211 小时前
Docker容器技术
运维·docker·容器
java_logo11 小时前
LinuxServer.io LibreOffice 容器化部署指南
java·开发语言·docker·dubbo·openoffice·libreoffice·opensource
杨浦老苏12 小时前
隐私优先的图片遮蔽工具AutoRedact
docker·ai·工具·群晖·图片
Radan小哥13 小时前
Docker学习笔记—day012
笔记·学习·docker
qq_54702617913 小时前
Docker 搭建Nexus3私服
运维·docker·容器
driver199914 小时前
hyperV装的windows11安装docker不支持虚拟化
运维·docker·容器
warrah14 小时前
docker portainer的应用
docker