无法运行java程序。 docker

时间:2017-06-09 11:53:54

标签: docker dockerfile docker-for-windows docker-desktop docker-java

我只是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>

在路径C:\java-windows-docker\Dockerfile中创建了一个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发送版本   上下文到Docker守护进程11.78 kB步骤1/5:FROM   java-windows-docker ---> 534f46817a18第2/5步:WORKDIR   C:\ testing ---> fc954983c8b0正在删除中间容器   5e30071d9159步骤3/5:运行javac Hello.java --->运行   c91c62ba707c javac'不被视为内部或外部   命令,可操作程序或批处理文件。命令' cmd / S / C javac   Hello.java'返回非零代码:1

对此提出任何建议都会有所帮助。如果可能请帮我使用示例Dockerfile来运行这个java程序。过去两天我一直在研究这个问题,但我无法解决这个问题。 我想知道如何在docker镜像中设置路径以及它实际上是如何工作的。我也尝试设置路径

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 个答案:

答案 0 :(得分:0)

我还没有在系统中设置环境变量。将java路径设置为:

  1. 我的电脑 - >系统属性 - >高级系统设置 - >单击环境变量。

  2. 点击新建: 输入变量名称:JAVA_HOME 和变量值为:C:\ Program Files \ Java \ jdk1.8.0_121 \ bin //您的java bin路径。

答案 1 :(得分:0)

图片有图层。每层由以下组成:图像库+命令。

让我们回顾一下,您创建了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:我没有专注于语法。只有概念。我现在不在我的开发机器前面。 ;)