代码之家  ›  专栏  ›  技术社区  ›  Skyblade

microsoft/nanoserver docker image无法启动java。exe,而microsoft/windowsservercore成功

  •  2
  • Skyblade  · 技术社区  · 9 年前

    microsoft/nanoserver 形象

    系统信息

    > docker version
    Client:
     Version:      17.06.0-ce
     API version:  1.30
     Go version:   go1.8.3
     Git commit:   02c1d87
     Built:        Fri Jun 23 21:30:30 2017
     OS/Arch:      windows/amd64
    
    Server:
     Version:      17.06.0-ce
     API version:  1.30 (minimum version 1.24)
     Go version:   go1.8.3
     Git commit:   02c1d87
     Built:        Fri Jun 23 22:19:00 2017
     OS/Arch:      windows/amd64
     Experimental: true
    
    > docker info
    Containers: 2
     Running: 0
     Paused: 0
     Stopped: 2
    Images: 22
    Server Version: 17.06.0-ce
    Storage Driver: windowsfilter
     Windows:
    Logging Driver: json-file
    Plugins:
     Volume: local
     Network: l2bridge l2tunnel nat null overlay transparent
     Log: awslogs etwlogs fluentd json-file logentries splunk syslog
    Swarm: inactive
    Default Isolation: hyperv
    Kernel Version: 10.0 15063 (15063.0.amd64fre.rs2_release.170317-1834)
    Operating System: Windows 10 Enterprise
    OSType: windows
    Architecture: x86_64
    CPUs: 1
    Total Memory: 5.999GiB
    Name: MYSERVER
    ID: RKVO:G6SF:7OPN:RR5Y:4DGX:DSZG:MCGO:FTNS:YLWY:2LKH:TRZE:JU76
    Docker Root Dir: C:\ProgramData\Docker
    Debug Mode (client): false
    Debug Mode (server): true
     File Descriptors: -1
     Goroutines: 86
     System Time: 2017-08-09T09:36:17.8905051-07:00
     EventsListeners: 0
    Registry: https://index.docker.io/v1/
    Experimental: true
    Insecure Registries:
     127.0.0.0/8
    Live Restore Enabled: false
    

    Dockerfile文件

    https://alexandrnikitin.github.io/blog/running-java-inside-windows-container-on-windows-server/

    FROM microsoft/nanoserver
    
    RUN powershell -Command iwr 'http://javadl.oracle.com/webapps/download/AutoDL?BundleId=210185' -Outfile 'C:\jre-8u91-windows-x64.exe'
    RUN powershell start-process -filepath C:\jre-8u91-windows-x64.exe -passthru -wait -argumentlist "/s,INSTALLDIR=c:\Java\jre1.8.0_91,/L,install64.log"
    RUN del C:\jre-8u91-windows-x64.exe
    
    CMD [ "c:\\Java\\jre1.8.0_91\\bin\\java.exe", "-version"]
    

    > docker build -t java-nano:jre1.8.0_91 .
    Sending build context to Docker daemon  2.048kB
    Step 1/5 : FROM microsoft/nanoserver
     ---> 9473d5d31d36
    Step 2/5 : RUN powershell -Command iwr 'http://javadl.oracle.com/webapps/download/AutoDL?BundleId=210185' -Outfile 'C:\jre-8u91-windows-x64.exe'
     ---> Running in 33ec7e07b8ef
     ---> c2002718022c
    Removing intermediate container 33ec7e07b8ef
    Step 3/5 : RUN powershell start-process -filepath C:\jre-8u91-windows-x64.exe -passthru -wait -argumentlist "/s,INSTALLDIR=c:\Java\jre1.8.0_91,/L,install64.log"
     ---> Running in 6694b9e2d6cf
    
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
    -------  ------    -----      -----     ------     --  -- -----------
                  3      460       1468              1424   1 jre-8u91-windows-x64
    
    
     ---> 751796f146a7
    Removing intermediate container 6694b9e2d6cf
    Step 4/5 : RUN del C:\jre-8u91-windows-x64.exe
     ---> Running in 8bac610ca925
     ---> 1d953ec09391
    Removing intermediate container 8bac610ca925
    Step 5/5 : CMD c:\Java\jre1.8.0_91\bin\java.exe -version
     ---> Running in 8f9aecd8aa6b
     ---> 865e2c4a3b5c
    Removing intermediate container 8f9aecd8aa6b
    Successfully built 865e2c4a3b5c
    Successfully tagged java-nano:jre1.8.0_91
    

    运行它

    > docker run -it java-nano:jre1.8.0_91
    C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: container 55868b76113bbb1231e1b59e26bf2301b7d1a80a7cb1617efed862a5d4516401 encountered an error during CreateProcess: failure in a Windows system call: The system cannot find the file sp
    ecified. (0x2) extra info: {"ApplicationName":"","CommandLine":"c:\\Java\\jre1.8.0_91\\bin\\java.exe -version","User":"","WorkingDirectory":"C:\\","Environment":{},"EmulateConsole":true,"CreateStdInPipe":true,"CreateStdOutPipe":true,"CreateStdErrPipe":false,"ConsoleSize"
    :[48,164]}.
    

    >docker run microsoft/nanoserver
    Microsoft Windows [Version 10.0.14393]
    (c) 2016 Microsoft Corporation. All rights reserved.
    

    Windows Server核心版本

    FROM microsoft/windowsservercore
    
    RUN powershell -Command iwr 'http://javadl.oracle.com/webapps/download/AutoDL?BundleId=210185' -Outfile 'C:\jre-8u91-windows-x64.exe'
    RUN powershell start-process -filepath C:\jre-8u91-windows-x64.exe -passthru -wait -argumentlist "/s,INSTALLDIR=c:\Java\jre1.8.0_91,/L,install64.log"
    RUN del C:\jre-8u91-windows-x64.exe
    
    CMD [ "c:\\Java\\jre1.8.0_91\\bin\\java.exe", "-version"]
    

    生成图像

    > docker build -t java-core:jre1.8.0_91 .
    Sending build context to Docker daemon  2.048kB
    Step 1/5 : FROM microsoft/windowsservercore
     ---> 2c42a1b4dea8
    Step 2/5 : RUN powershell -Command iwr 'http://javadl.oracle.com/webapps/download/AutoDL?BundleId=210185' -Outfile 'C:\jre-8u91-windows-x64.exe'
     ---> Running in 8eef04cb451e
     ---> 9f1ad85b2b05
    Removing intermediate container 8eef04cb451e
    Step 3/5 : RUN powershell start-process -filepath C:\jre-8u91-windows-x64.exe -passthru -wait -argumentlist "/s,INSTALLDIR=c:\Java\jre1.8.0_91,/L,install64.log"
     ---> Running in ef30759baacf
    
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
    -------  ------    -----      -----     ------     --  -- -----------
          0       1      388         68       0.16   2060   1 jre-8u91-windows-x64
    
    
     ---> f05ce070cd55
    Removing intermediate container ef30759baacf
    Step 4/5 : RUN del C:\jre-8u91-windows-x64.exe
     ---> Running in 8dfc09e67472
     ---> ea9f0c6c9f8a
    Removing intermediate container 8dfc09e67472
    Step 5/5 : CMD c:\Java\jre1.8.0_91\bin\java.exe -version
     ---> Running in c0aa37469049
     ---> c1b7ccca9adc
    Removing intermediate container c0aa37469049
    Successfully built c1b7ccca9adc
    Successfully tagged java-core:jre1.8.0_91
    

    运行它

    > docker run -it java-core:jre1.8.0_91
    java version "1.8.0_91"
    Java(TM) SE Runtime Environment (build 1.8.0_91-b15)
    Java HotSpot(TM) 64-Bit Server VM (build 25.91-b15, mixed mode)
    

    问题

    如何检测,nanoserver有什么问题?
    观察 C:\ProgramData\Docker\containers\<id>

    2 回复  |  直到 9 年前
        1
  •  1
  •   Tarun Lalwani    9 年前

    Step 3/5 : RUN powershell start-process -filepath C:\jre-8u91-windows-x64.exe -passthru -wait -argumentlist "/s,INSTALLDIR=c:\Java\jre1.8.0_91,/L,install64.log"
    

    docker run -it java-nano:jre1.8.0_91 powershell
    

    您也可以尝试重新安装,看看安装程序是否有任何错误。可能是某些依赖项不存在

        2
  •  1
  •   user14124342    6 年前

    我将我笔记本电脑的当前JRE安装(C:\Program Files\Java\jre1.8.0\u 221)压缩到jre1.8.0\u 221.zip中。然后使用dockerfile:

    FROM mcr.microsoft.com/windows/nanoserver:10.0.14393.1066
    COPY jre1.8.0_221.zip c:\\jre1.8.0_221.zip
    RUN powershell Expand-Archive -Force c:\jre1.8.0_221.zip c:
    ENV JAVA_HOME "C:\jre1.8.0_221"
    ENV PATH "C:\jre1.8.0_221\bin"
    CMD java -version
    

    这对我很有效。