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 单体权限管理系统

相关文章
|
1月前
|
网络协议 网络安全
sudo mount -t nfs server_ip:/path/to/shared_directory /mnt/local_directory命令的作用是什么?
sudo mount -t nfs server_ip:/path/to/shared_directory /mnt/local_directory命令的作用是什么?
32 1
|
Java Linux Nacos
[root@CentOS7 bin]# ./startup.sh -p 3333 which: no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbi
[root@CentOS7 bin]# ./startup.sh -p 3333 which: no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbi
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.
346 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.
487 0
未解决: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
248 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
373 0
|
Perl
/usr/bin/sed: No such file or directory
/usr/bin/sed: No such file or directory
191 0
编译问题解决:mkdir: 无法创建目录"/usr/local/share/man/man1": 文件已存在
编译问题解决:mkdir: 无法创建目录"/usr/local/share/man/man1": 文件已存在
320 0
|
开发工具 git
/usr/bin/env: escript: No such file or directory的解决办法
/usr/bin/env: escript: No such file or directory的解决办法
481 0
编译问题解决:mkdir: 无法创建目录"/usr/local/share/man/man1": 文件已存在
编译问题解决:mkdir: 无法创建目录"/usr/local/share/man/man1": 文件已存在
587 0