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

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

1.png

问题描述


使用下面的 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

成功截图如下:

2.png

开源项目


  • SpringCloud + Vue3 微服务商城


SpringBoot 3+ Vue3 单体权限管理系统

相关文章
mkdir: cannot create directory `**': No such file or directory
在mkdir时报错的解决方案,在网上找了很多文章都没有说清楚原因。
256 0
|
Shell Docker 容器
Docker - 解决同步容器与主机时间报错:Error response from daemon: Error processing tar file(exit status 1): invalid symlink "/usr/share/zoneinfo/UTC" -> "../usr/share/zoneinfo/Asia/Shanghai"
Docker - 解决同步容器与主机时间报错:Error response from daemon: Error processing tar file(exit status 1): invalid symlink "/usr/share/zoneinfo/UTC" -> "../usr/share/zoneinfo/Asia/Shanghai"
944 0
Docker - 解决同步容器与主机时间报错:Error response from daemon: Error processing tar file(exit status 1): invalid symlink "/usr/share/zoneinfo/UTC" -> "../usr/share/zoneinfo/Asia/Shanghai"
未解决:lrelease: could not exec ‘/usr/lib/qt5/bin/lrelease‘: No such file or directory
未解决:lrelease: could not exec ‘/usr/lib/qt5/bin/lrelease‘: No such file or directory
188 0
Can‘t exec “aclocal“: 没有那个文件或目录 at /usr/share/autoconf/Autom4te/FileUtils.pm line 326.
Can‘t exec “aclocal“: 没有那个文件或目录 at /usr/share/autoconf/Autom4te/FileUtils.pm line 326.
282 0
Can‘t exec “autopoint“: 没有那个文件或目录 at /usr/share/autoconf/Autom4te/FileUtils.pm line 345.
Can‘t exec “autopoint“: 没有那个文件或目录 at /usr/share/autoconf/Autom4te/FileUtils.pm line 345.
420 0
Note that ‘/home/w/.local/share‘ is not in the search pathset by the XDG_DATA_HOME and XDG_DATA_DIRS
Note that ‘/home/w/.local/share‘ is not in the search pathset by the XDG_DATA_HOME and XDG_DATA_DIRS
310 0
/usr/bin/xsltproc: not found
/usr/bin/xsltproc: not found
104 0
|
Perl
/usr/bin/sed: No such file or directory
/usr/bin/sed: No such file or directory
145 0
|
Shell 数据库管理
/bin/sh: 1: tclsh: not found
/bin/sh: 1: tclsh: not found
252 0
|
开发工具 git
/usr/bin/env: escript: No such file or directory的解决办法
/usr/bin/env: escript: No such file or directory的解决办法
399 0