Error: Unable to access jarfile jar-runner.jar
cuando intento ejecutar mi jar.
archivo acoplable:
FROM anapsix/alpine-java MAINTAINER bramhaag CMD ["java", "-jar", "jar-runner.jar", "some param", "some param"]
El archivo jar se encuentra en /home/selfbot/ y lo estoy ejecutando con Portainer. Así es como se ve mi contenedor Portainer:
¿Cómo haría que esto funcione?
Con el formato CMD [ ]
"exec", Docker intentará ver los argumentos y dar su opinión sobre su utilidad. "No se puede acceder al archivo jar" es un mensaje de Docker y solo significa que Docker tiene algunos problemas (no especificados) con un archivo jar. Lo encontré cuando el nombre del archivo jar contenía una variable ENV
, por ejemplo. Docker no pudo manejar eso, aparentemente.
También existe el formato "shell" de CMD
, CMD java -jar jar-runner.jar "some param" "some param"
. Esto se conoce como el formato de shell porque Docker entrega los argumentos a /bin/sh -c
. Como resultado, no está tratando de adivinar lo que significan los argumentos. sh
a su vez tampoco trata de ser inteligente. Y java
es completamente capaz de usar jar-runner.jar
.
Eso sí, si tiene un error tipográfico en jar-runner.jar
, o si lo colocó en la ubicación incorrecta, entonces el mensaje de Docker podría ser correcto. La solución de shell es útil cuando Docker adivina mal.
Parece que tiene el volumen montado, por lo que suponiendo que tenga razón en que el archivo jar está disponible en el contenedor a través de ese volumen, probablemente solo necesite especificar la ruta para que Java pueda encontrarlo.
CMD ["java", "-jar", "/home/selfbot/jar-runner.jar", "some param", "some param"]
Puede verificar si el archivo está realmente disponible ejecutando un comando diferente para mostrarle el contenido de un directorio determinado. Cambie el comando (en Portainer) a algo como
ls -la /home/selfbot
Y luego puede verificar si el archivo jar está realmente donde lo cree, si es legible, etc. Este comando se cerrará de inmediato, pero su salida estará disponible en el registro del contenedor.
Tratar
ENTRYPOINT ["java","-jar","jar-runner.jar"] CMD ["some param"]
Tuve un problema similar aquí en mi publicación: Error: no se puede acceder al archivo jar cuando se ejecuta el contenedor docker