образу докера microsoft / nanoserver не удается запустить java.exe, в то время как microsoft / windowsservercore успешно

2

Я пытаюсь создать образ docker Windows с java с изображения 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

Dockerfile - это слегка измененная версия этой статьи, раздел 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"]

Построить образ

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

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

Построить образ

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

Вопрос

Как обнаружить, что случилось с наносервером?
Наблюдение C:\ProgramData\Docker\containers\<id> ничего не дает - файл *.log отсутствует.

  • 1
    Выполните одно действие: запустите нано-сервер с powershell, а не docker run -it java-nano:jre1.8.0_91 powershell java, docker run -it java-nano:jre1.8.0_91 powershell а затем перейдите и проверьте, правильно ли установлена Java в горячем состоянии или нет, а файл действительно существует или нет.
  • 0
    @TarunLalwani Большое спасибо! Я вошел в контейнер, и в нано-образе нет Java, но Java присутствует в основном образе. Не могли бы вы добавить это как ответ, чтобы я мог принять это?
Теги:
docker
windows-server
nano-server

1 ответ

1
Лучший ответ

В основном это проблема установки. Один ваш шаг 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"

Он работает успешно с точки зрения кода выхода, но может быть установщик сталкивается с некоторыми проблемами. Вы должны запустить оболочку и проверить, работает ли программа установки

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

Также вы можете попробовать переустановить и посмотреть, есть ли какая-либо ошибка, которую вы получаете из программы установки. Возможно, некоторые зависимости не присутствуют

Ещё вопросы

Сообщество Overcoder
Наверх
Меню