2016-11-19 18 views
2

我想了解Docker的方式。 I want to build a container/image for my java application.泊塢窗文件看起來是這樣的:如何在Docker中構建和運行java實例

FROM openjdk:7 

COPY . C:/Users/name/Documents/NetBeansProjects/project1/src/mainpckg 

WORKDIR C:/Users/name/Documents/NetBeansProjects/project1/src/mainpckg 

RUN javac Main.java 

CMD java Main 

,我稱它是這樣的:

docker build -t my-java-app . 

但它提供了以下錯誤:

$ docker build -t my-java-app . 
Sending build context to Docker daemon 3.072 kB 
Step 1 : FROM openjdk:7 
---> 4a42f05dc422 
Step 2 : COPY . C:/Users/name/Documents/NetBeansProjects/project1 
/src/mainpckg 
---> Using cache 
---> 301de702fad9 
Step 3 : WORKDIR C:/Users/name/Documents/NetBeansProjects/project1 
s/src/mainpckg 
---> Using cache 
---> 1868e40b329e 
Step 4 : RUN javac Main.java 
---> Running in 66d7d769f425 
javac: file not found: Main.java 
Usage: javac <options> <source files> 
use -help for a list of possible options 
The command '/bin/sh -c javac Main.java' returned a non-zero code: 
2 

我也試圖給出的解決方案here

docker run --rm -v /mypathhere/mycode java:7 sh -c "cd mycode; javac mycode.java" 

但沒有任何結果,我仍然得到這個錯誤:

javac: file not found: Main.java 
Usage: javac <options> <source files> 
use -help for a list of possible options 
+0

Openjdk容器是基於Debian Linux發行版,我不認爲'C:/ ...'是一個有效的路徑。你想用類似'/ app'的方式嘗試一下,看看它是否更好? – R0MANARMY

回答

0

我不知道爲什麼你-v /mypathhere/mycode運行,因爲它creates a data volume這將覆蓋(覆蓋臨時)任何東西,這是從Dockerfile /mypathhere/mycode

所以儘量不的-v部分運行,萬一/mypathhere/mycodeC:/Users/name/Documents/NetBeansProjects/project1(假設你使用的碼頭工人在Windows與Windows容器)

+0

現在我得到了下面的'不是一個有效的存儲庫/標籤。' –

1

有關於C有鬼:/。嘗試下面,它必須工作

FROM java:8 

# add the container directory from the host 
RUN mkdir /opt/mainpckg 

# copy the app to container directory 
ADD . /opt/mainpckg 

WORKDIR /opt/mainpckg 

RUN javac Main.java 

CMD java Main 
+0

我很困惑你的目錄是什麼意思。如果將它們設置得與Docker知道在哪裏查找Main.java完全相同? –

+0

@Angelo Uknown正如您在Dockefile中看到的,您已在第3步將所有應用程序文件從主機系統複製到docker目錄/ opt/mainpckg,並將此目錄設置爲第4步中的當前工作目錄。因此,您將設置爲在您的Main.Java所在的目錄/ opt/mainpckg中發出java命令。希望它現在更有意義。 –