Невозможно запустить программу Java. Ошибка внутри докера
Я только начинающий в Docker и изучал различные возможности. Я успешно установил Java в Docker
**OS version**:Windows Server 2016
PS C:\testing> docker version
Client:
Version: 17.03.1-ee-3
API version: 1.27
Go version: go1.7.5
Git commit: 3fcee33
Built: Thu Mar 30 19:31:22 2017
OS/Arch: windows/amd64
Server:
Version: 17.03.1-ee-3
API version: 1.27 (minimum version 1.24)
Go version: go1.7.5
Git commit: 3fcee33
Built: Thu Mar 30 19:31:22 2017
OS/Arch: windows/amd64
Experimental: false
PS C:\testing>
Создаем Dockerfile в пути c:\java-windows-docker\Dockerfile и помещаем в него следующие строки:
FROM windowsservercore
RUN powershell (new-object
System.Net.WebClient).Downloadfile('http://javadl.oracle.com/webapps/download/AutoDL?
BundleId=210185', '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"]
It downloads the Java 8 Update 91 Windows installer and silently installs it to c:\Java\jre1.8.0_91.
docker build -t java-windows-docker c: \ java-windows-docker И если мы его запустим, то после запуска контейнер запускает Java и печатает свою версию.
PS C:\Windows\system32> docker run java-windows-docker
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)
We have Java running. inside a Windows docker container which is hosted on a Windows server 2016
Я хочу запустить простую программу Java. Код в файлах Java, как показано ниже:
class Hello{
public static void main(String[] args){
System.out.println("This is java app \n by using Docker");
}
}
Затем в качестве следующего шага я построил образ для вышеуказанной программы. Dockerfile для сборки Java-программы
FROM testing
WORKDIR C:\\testing
RUN javac Hello.java
CMD ["java","Hello"]
когда я создаю изображение. я получаю показанную ниже ошибку:
PS C:\testing> docker build -t testing C:\testing
Sending build context to Docker daemon 11.78 kB
Step 1/5 : FROM java-windows-docker
---> 534f46817a18
Step 2/5 : WORKDIR C:\\testing
---> fc954983c8b0
Removing intermediate container 5e30071d9159
Step 3/5 : RUN javac Hello.java
---> Running in c91c62ba707c
javac' is not recognized as an internal or external command,
operable program or batch file.
The command 'cmd /S /C javac Hello.java' returned a non-zero code: 1
Любой совет по этому вопросу будет полезен. Если возможно, пожалуйста, помогите мне с примером Dockerfile для запуска этой Java-программы. Я работал над этим в течение последних двух дней, я не могу заставить это работать. Мне интересно, как установить путь внутри образа докера и как это на самом деле работает. Я также пытался установить путь
ENV JAVA_HOME C:\Java\jre1.8.0_91\bin;
RUN setx PATH %PATH%;%JAVA_HOME%\bin
RUN setx CLASSPATH %CLASSPATH%;C:\Java\jre1.8.0_91;C:\testing;.;
но это не работает Я не знаю, когда установить этот путь при создании изображения Java или при запуске программы Java. Просьба сообщить. Спасибо заранее
2 ответа
Изображения имеют слои. Каждый слой состоит из: основы изображения + команды.
Давайте рассмотрим, вы создаете java-windows-docker:
FROM windowsservercore
RUN powershell...
RUN powershell...
RUN del C:\jre-8u91-windows-x64.exe
CMD [ "c:\\Java\\jre1.8.0_91\\bin\\java.exe", "-version"]
Вы должны добавить этот каталог в PATH и определить свой JAVA_HOME.
FROM windowsservercore
RUN powershell...
RUN powershell...
RUN del C:\jre-8u91-windows-x64.exe
RUN set JAVA_HOME=""c:\\Java\\jre1.8.0_91\\"
RUN set PATH=%PATH%,%JAVA_HOME%\bin
CMD [ "c:\\Java\\jre1.8.0_91\\bin\\java.exe", "-version"]
Таким образом, каждое приложение, работающее в этом контейнере (java-windows-docker), будет иметь доступ к Java независимо от каталога.
Тогда ваш тестовый образ будет использовать в качестве основы изображения java-windows-docker:
FROM java-windows-docker
WORKDIR C:\\testing
RUN javac Hello.java
CMD ["java","Hello"]
PS: я не был сосредоточен на синтаксисе. Только по концепции. Я не перед моей машиной для разработки прямо сейчас.;)
Я думаю, что вы не установили переменную среды в системе. Установите путь Java как:
Мой компьютер -> Свойства системы -> Дополнительные параметры системы -> Нажмите на переменные среды.
Нажмите кнопку "Создать": введите имя переменной как: JAVA_HOME и значение переменной как:C:\Program Files\Java\jdk1.8.0_121\bin // Ваш путь к java bin.