【发布时间】:2017-11-11 10:22:20
【问题描述】:
我只是 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 程序时何时设置此路径。请告知。提前谢谢
【问题讨论】:
-
Docker 镜像就像虚拟机一样冻结在时间里。让我们回顾一下: - windowsservercore >> java-windows-docker - 测试(来自哪个图像?本身?)我认为您应该从 java-windows-docker 创建测试图像。当您创建 java-windows-docker 时,您必须创建
JAVA_HOME,并将您的 java 安装添加到PATH环境变量。
标签: docker dockerfile docker-for-windows docker-desktop docker-java