无法运行Java程序。 docker里面的错误

我只是Docker的初学者,并且正在探索各种各样的特性。我已经成功在docker中安装了java

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

在pathc:\ java-windows-docker \ Dockerfile中创build一个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 -window-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"); } } 

然后作为下一步我build立了上述程序的图像。 用于构buildJava程序的Dockerfile

 FROM testing WORKDIR C:\\testing RUN javac Hello.java CMD ["java","Hello"] 

当我build立image.i得到显示下面的错误:

 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 

任何build议,这将是有益的。 如果可能请帮助我的示例Dockerfile运行此Java程序。 过去两天我一直在做这个工作,我无法得到这个工作。 我想知道如何设置泊坞窗图像内的path,以及如何实际works.i也试图设置path

 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;.; 

但它不起作用。 我不知道何时build立这个path,而build立的Java图像或运行Java程序。 请提前。感谢您的提前

我没有在系统中设置环境variables。 将javapath设置为:

  1. 我的电脑 – >系统属性 – >高级系统设置 – >点击环境variables。

  2. 单击新build:inputvariables名称:JAVA_HOME和variables值为:C:\ Program Files \ Java \ jdk1.8.0_121 \ bin //您的java binpath。

图像有层次。 每一层都由一个图像库+命令组成。

让我们来回顾一下,你创build了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。

然后,您的testing图像将用作图像库java-windows-docker图像:

 FROM java-windows-docker WORKDIR C:\\testing RUN javac Hello.java CMD ["java","Hello"] 

PS:我没有专注于语法。 只在概念上。 我现在不在我的开发机器前面。 ;)