我有一个相当标准的Java映像,其中添加了一些依赖项,我将这个Dockerfile写在上面。这是我在Dockerfile中遇到问题的地方:
RUN which java
RUN ["/usr/bin/java", "-jar", "tzupdater.jar", "-v", "-l"]
我认为每个Dockerfile命令都是以root身份运行的?但是当我尝试从这个Dockerfile构建时,我遇到了这个权限问题,当我忘记以sudo
运行这个JAR时,这也发生在我的本地环境中:
$ 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
我能够在我的本地运行此实用程序sudo
,使用完全相同的Java版本,没有任何问题。当我尝试在没有sudo
的情况下在本地运行它时,我收到了同样的错误。想法?
答案 0 :(得分:1)
(这更像是评论,但消息长度超出了评论限制,所以我把它留在这里作为答案,以便其他人可以根据我做的事情提供更多有用的信息。)
似乎它确实是一个尚未解决的问题,我通过与enoniccloud/java6
用户一起运行的图片root
重现了您的问题,我也尝试docker run -it --privileged ...
手动运行它,但它没有救命。我还尝试使用基本图片jdk8
alpine:3.3
,但也失败了:
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
我搜索过,我找到的唯一信息如下:
在找到此问题的根本原因之前,我认为构建图像的另一种方法可能是:
JAVA_HOME
和PATH
,在您的主机上运行java -jar tzupdater.jar -v -l
ADD
构建基础映像,以映像和设置环境变量,如JAVA_HOME
和PATH
希望这对你有所帮助: - )
答案 1 :(得分:0)
docker build
将完成RUN
步骤,作为Dockerfile中的最后一个USER
设置。
要重置:
RUN whoami
USER root
RUN ["/usr/bin/java", "-jar", "tzupdater.jar", "-v", "-l"]
USER "whatever whoami reported"
答案 2 :(得分:0)
我有一个解决方法。添加一些[7, 7]
命令(没有实际效果)可以使其工作:
<httpCookies httpOnlyCookies="true" requireSSL="true" sameSite="None" />
<sessionState timeout="20" cookieSameSite="None" />
<httpRuntime targetFramework="4.8" />
<compilation debug="true" targetFramework="4.8" />
我不知道它为什么起作用,是通过反复试验得到的。
请注意,两个mv
命令的作用与FROM openjdk:7u211-jdk-alpine3.9
ADD tzupdater.jar tzupdater.jar
RUN mv /usr/lib/jvm/java-1.7-openjdk/jre/lib/zi /usr/lib/jvm/java-1.7-openjdk/jre/lib/zi.tzdata2018g && \
mv /usr/lib/jvm/java-1.7-openjdk/jre/lib/zi.tzdata2018g /usr/lib/jvm/java-1.7-openjdk/jre/lib/zi && \
java -jar tzupdater.jar -v -l https://.../tzdata-latest.tar.gz
相似,因此没有任何实际变化。
mv
中使用的文件名(实际上是目录)是错误时输出的文件名(在解决方法之前),因此请相应地进行更改。