Я помогаю в проекте, который состоит из стека Docker с кучей сервисов, работающих вместе. Все они начинаются, кроме одного.
Использование docker service ps my-service --no-trunc
дает мне: task: non-zero exit(1)
Использование docker service logs my-service
дает мне: Error: could not find or load main class
В этом конкретном контейнере есть приложение Java, работающее с поддержкой сервера NodeJS. После npm install
, npm run init
, npm run build
и mvn clean install
я смог успешно построить образ Docker. Нет ошибок.
Однако сейчас это на самом деле не начинается. Я не могу понять, как диагностировать это дальше. Сообщение об ошибке не говорит мне много. Код Java старый, но он должен работать, я никогда его не трогал.
В основном, я не знаю, куда идти дальше. Поиски в Google приводят только к тому, что у них есть доступ к гораздо большему количеству отладочной информации, и мне просто не хватает продолжения. Ява не моя сила. Чего мне не хватает?
ОБНОВЛЕНИЕ 21.03.19: Благодаря @VinDev, я смог получить более подробную информацию (для меня было очевидно, что я должен попробовать это, но это полезно для изучения).
Использовал docker run --name TestMyContainer -it my-image bash
для запуска контейнера, затем выполнил обычную команду запуска для контейнера в стеке, которая равна catalina.sh run
. Это дало мне следующий вывод:
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /docker-java-home/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Error: Could not find or load main class
ОБНОВЛЕНИЕ № 2 21.03.19: Мне удалось решить проблему. Я должен был включить больше информации: я на машине с Windows, но делаю контейнеры для Linux. Я нашел ответ здесь: Запуск Tomcat - Ошибка: Не удалось найти или загрузить основной класс
Windows вернула файл setenv.sh
в CRLF EOL. Я изменил его обратно в Visual Studio Code, снова запустил контейнер, и все работает!