gpt4 book ai didi

java - 在 Dockerfile 中运行 Java 时区更新程序 JAR 时出现权限错误

转载 作者:行者123 更新时间:2023-11-30 06:48:38 25 4
gpt4 key购买 nike

我有一个相当标准的 Java 镜像,其中添加了一些依赖项,我正在其上编写此 Dockerfile。这是我的 Dockerfile 中遇到问题的地方:

RUN which java
RUN ["/usr/bin/java", "-jar", "tzupdater.jar", "-v", "-l"]

我以为每个 Dockerfile 命令都是以 root 身份运行的?但是,当我尝试从这个 Dockerfile 进行构建时,我遇到了这个权限问题,当我忘记将此 JAR 作为 sudo 运行时,该问题也在我的本地环境中发生:

$ docker build -t container-w-tz-update .
Uploading context 1.122 GB
Uploading context
Step 0 : FROM company/java-img-with-dependencies:1.0
---> 0101010101
...
Step 3 : RUN which java
---> Running in 0101010101
/usr/bin/java
---> 0101010101
Step 4 : RUN ["/usr/bin/java", "-jar", "tzupdater.jar", "-v", "-l"]
---> Running in 0101010101
java.vendor: Sun Microsystems Inc.
java.version: 1.6.0_45
tzupdater version 2.1.1-b01
Downloaded file to /tmp/tz.tmp/tzdata.tar.gz
Downloaded file to /tmp/tz.tmp/sha512hash
failed.
Cant rename {0} to {1}.
com.sun.tools.tzupdater.TzRuntimeException: com.sun.tools.tzupdater.TzRuntimeException: Cant rename {0} to {1}.

Caused by: com.sun.tools.tzupdater.TzRuntimeException: Cant rename {0} to {1}.
at com.sun.tools.tzupdater.TimezoneUpdater.update(TimezoneUpdater.java:301)
at com.sun.tools.tzupdater.TimezoneUpdater.run(TimezoneUpdater.java:249)
at com.sun.tools.tzupdater.TimezoneUpdater.main(TimezoneUpdater.java:643)
2017/04/05 22:20:23 The command [/usr/bin/java -jar tzupdater.jar -v -l] returned a non-zero code: 1

我能够在本地使用完全相同的 Java 版本以 sudo 形式运行此实用程序,没有任何问题。当我尝试在没有 sudo 的情况下在本地运行它时,我收到了相同的错误。想法?

最佳答案

(这更像是一条评论,但消息长度超出了评论限制,所以我将其留在这里作为答案,以便其他人可以根据我所做的事情提供更多有用的信息。)

似乎这确实是一个 Unresolved 问题,我通过使用 root 用户运行的图像 enoniccloud/java6 重现了您的问题,我还尝试了 docker run -it --特权... 手动运行它,但它没有帮助。我还尝试了使用基础镜像 alpine:3.3jdk8,但也失败了:

Downloaded file to /tmp/tz.tmp/sha512hash
Renaming /opt/jdk1.8.0_91/jre/lib/tzdb.dat to /opt/jdk1.8.0_91/jre/lib/tzdb.dat.tzdata2016a failed.
Cant rename {0} to {1}.
Validating for : tzdata2017b
Validation complete
JRE updated to version : tzdata2017b

我搜索了一下,找到的唯一信息如下:

在找到此问题的根本原因之前,我认为构建图像的替代方法可能是:

  • 下载适合您平台的 JDK tarball
  • 解压它,设置 JAVA_HOMEPATH,在主机上运行 java -jar tzupdater.jar -v -l
  • 基于此更新的 JDK 构建基础镜像,ADD 到镜像并设置环境变量,例如 JAVA_HOMEPATH

希望这对您有帮助:-)

关于java - 在 Dockerfile 中运行 Java 时区更新程序 JAR 时出现权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43242763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com