2017-04-05 67 views
1

我有一個相當標準的Java圖像,並添加了一些依賴項,我正在寫這個Dockerfile。這裏是我在Dockerfile中遇到問題的地方:權限error在Dockerfile中運行Java時區更新程序JAR

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 

我可以運行此實用程序sudo在我的本地與完全相同版本的Java沒有問題。當我嘗試在本地運行而沒有sudo時,我收到了同樣的錯誤。思考?

+0

您可以發佈您的基礎鏡像的Dockerfile嗎? 「tzupdater.jar」實際上會做什麼? – shizhz

+0

@shizhz tzupdater.jar是Oracle提供的用於更新Java標準庫中的時區數據的實用工具。它應該適用於Java 1.5到1.8。我明天將會發佈一個完整的Dockerfile。 –

+0

感謝您的信息,並對'tzupdater.jar'缺乏知識感到抱歉,我會嘗試查看是否可以重現您的問題:-) – shizhz

回答

0

docker build將完成RUN步驟作爲在Dockerfile中設置的最後USER

要重置:

RUN whoami 
USER root 
RUN ["/usr/bin/java", "-jar", "tzupdater.jar", "-v", "-l"] 
USER "whatever whoami reported" 
1

(這更像是一個評論,但消息長度超出了評論的限制,所以我在這裏把它作爲一個答案,這樣其他人可以或許給更多有用的信息根據我所做的一切。)

看來這真是一個沒有解決的問題,我用root用戶運行圖像enoniccloud/java6轉載您的問題,我也試過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 

我搜索,我發現的唯一信息如下:

在您找到此問題的根本原因之前,我認爲另一種方法來bui LD你的形象可能是:

  • 下載JDK壓縮包爲您的平臺
  • 其解壓縮,安裝JAVA_HOMEPATH,您的主機上運行java -jar tzupdater.jar -v -l
  • 建立在此基礎上更新的JDK基本映像,ADD到像JAVA_HOMEPATH

希望圖像和設置環境變量,這可能對您有所幫助:-)

相關問題