无法运行 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-dockerDockerfile中创建了一个 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:Javajre1.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:Javajre1.8.0_91.

docker build -t java-windows-docker C:java-windows-docker如果我们运行它,在启动后,容器会启动 Java 并打印出其版本。

PS C:Windowssystem32> 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");  
} 
}

然后作为下一步,我为上述程序构建了映像。 构建 Java 程序的Dockerfile

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 : 从 java-windows-docker ---> 534f46817a18 步骤 2/5 : WORKDIR C:\test ---> fc954983c8b0 删除中间容器 5e30071d9159 步骤 3/5 : 运行 javac 你好.java ---> 磨合 C91C62BA707C javac' 不被识别为内部或外部 命令、可操作程序或批处理文件。命令 'cmd/S/C javac 您好.java' 返回了一个非零代码:1

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

ENV JAVA_HOME C:Javajre1.8.0_91bin;
RUN setx PATH %PATH%;%JAVA_HOME%bin
RUN setx CLASSPATH %CLASSPATH%;C:Javajre1.8.0_91;C:testing;.;

但它不起作用。我不知道在构建 java 映像或运行 java 程序时何时设置此路径。恳请指教。提前致谢

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

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

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

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

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

最新更新