Erstellen und führen Sie ein Docker -Bild für Java -Anwendung mit Paketen aus und führen Sie sie ausJava

Java-Forum
Anonymous
 Erstellen und führen Sie ein Docker -Bild für Java -Anwendung mit Paketen aus und führen Sie sie aus

Post by Anonymous »

Ich habe es geschafft, ein Docker -Image für eine einfache Hello World Java -Konsolenanwendung einzurichten und auszuführen, aber ich kämpfe damit, wenn ich Pakete hinzufüge.
Ich habe das funktioniert: < /p>
Ordnerinhalt: < /p>
Dockerfile HelloWorld.class HelloWorld.java
< /code>
dockerfile: < /p>
FROM openjdk:11-jdk-slim
WORKDIR /app
COPY HelloWorld.java .
RUN javac HelloWorld.java
CMD ["java", "HelloWorld"]
< /code>
Java -Klasse: < /p>
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Docker World!");
}
}
< /code>
Dies funktioniert gut mit < /p>
sudo docker build -t hello-world-java .

sudo docker run hello-world-java
< /code>
Aber wenn ich dem Ordnergehalt und der Klasse ein Paket für die Klasse hinzufüge: < /p>
Java -Klasse: < /p>
package hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Docker World!");
}
}
< /code>
Inhalt < /p>
~/workspace/helloWorldPackage$ tree
.
├── Dockerfile
└── hello
├── HelloWorld.class
└── HelloWorld.java

2 directories, 3 files
< /code>
und modifizieren Sie Dockerfile wie: < /p>
FROM openjdk:11-jdk-slim
WORKDIR /app
COPY hello/ .
RUN javac HelloWorld.java
CMD ["java", "hello.HelloWorld"]
< /code>
Ich kann es docken erstellen, aber beim Laufen bekomme ich: < /p>
Error: Could not find or load main class hello.HelloWorld
Caused by: java.lang.ClassNotFoundException: hello.HelloWorld
exit status 1
< /code>
Ich habe mehrere Änderungen in der Dockerfile ohne Erfolg ausprobiert. Meistens ändern Sie den Klassenpfad auf der CMD oder was er in Kopie/Workdir kopiert wird, aber ich denke, ich verstehe nicht genau, was solche Befehle tun. Läuft CMD im Ordner von WorkDir aus? Wie interagiert es mit dem Kopierordner? Und mit dem Java -Befehl? Ich denke, es fehlt mir etwas, damit es funktioniert. Ähnliches Verhalten wie ich für eine packlose Java -Anwendung. D.h. Die richtige Beschreibung der Dockerfile, in der Java den richtigen Klassenpfad fängt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post