2

I'm trying to create a Windows docker image with java from microsoft/nanoserver image.

System info

> 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

Dockerfile is a slightly modified version from this article, section 4: 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"]

Build image

> 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

Run it

> 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]}.

Base image run

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

Windows Server Core version

Dockerfile

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"]

Build image

> 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

Run it

> 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)

Question

How to detect, what's wrong with nanoserver?
Observing C:\ProgramData\Docker\containers\<id> gives nothing - there is no *.log file.

Skyblade
  • 2,354
  • 4
  • 25
  • 44
  • 1
    Do one thing run the nano server with powershell and not java `docker run -it java-nano:jre1.8.0_91 powershell` and then go and check if Java actually hot installed properly or not and if the file actually exists or not. – Tarun Lalwani Aug 10 '17 at 08:37
  • @TarunLalwani Thank you very much! I entered the container and there is no Java in nano image, but Java is present in a core image. Could you please add this as an answer so I can accept it? – Skyblade Aug 10 '17 at 09:10

2 Answers2

1

This mostly appears to be a installation issue. One your step 3

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"

It is running successfully in terms of exit code but may be installer is running into some problems. You should run a shell and check if the installer workd

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

Also you can try and reinstall and see if there is any error that you get out of the installer. Might be some dependencies not being present

Tarun Lalwani
  • 142,312
  • 9
  • 204
  • 265
1

I zipped the current JRE installation of my laptop (C:\Program Files\Java\jre1.8.0_221) into jre1.8.0_221.zip. Then used the 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

It worked for me.