Me doy cuenta de que es posible que ya se haya hecho esta pregunta, pero en mi investigación no puedo encontrar una respuesta. Probablemente estoy cometiendo un simple error.
Me gustaría ejecutar una clase de Java localmente con Docker, dentro de un contenedor. A continuación se muestra mi Dockerfile:
Dockerfile
FROM maven:3.5.2-jdk-8 COPY src /src RUN javac src/java/com/Main.java CMD java src/java/com/MainLuego ejecuto estos comandos en orden:
docker build -t my_image_6_26_19:latest . docker run -it my_image_6_26_19:latest El comando de build funciona bien, pero el comando de run arroja el siguiente error:
Error: Could not find or load main class src.java.com.MainHe revisado las siguientes preguntas sobre SO, pero parece que ninguna respuesta funciona (o tal vez no entendí la solución):
Cuando construyo el contenedor, a través de una depuración ( RUN ls /src/java/com ) puedo ver que se está creando un archivo Main.class . No estoy seguro de por qué no se puede encontrar ese archivo. Además, he intentado cambiar la última línea de mi Dockerfile a CMD java src/java/com/Main.class , pero no tuve suerte.
Si Main no tiene un paquete, intente:
CMD java -classpath src/java/com Main si tiene un paquete (por ejemplo, com , ¿quizás?) intente:
CMD java -classpath src/java com.MainLa segunda versión en respuesta de @martijno es la correcta. Además, recomiendo decirle al compilador que escriba la salida en otro directorio, por ejemplo, bin :
RUN javac src/java/com/Main.java -d bin CMD java -cp bin com.Main