Контейнер не запускается во время развертывания стека докеров, не может найти или загрузить основной класс, не может выполнить дальнейшую диагностику - PullRequest
1 голос
/ 21 марта 2019

Я помогаю в проекте, который состоит из стека 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, снова запустил контейнер, и все работает!

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Я добавил это к исходному сообщению, но добавил его и здесь, чтобы правильно пометить вопрос как ответивший:

Мне удалось решить проблему.Я должен был включить больше информации: я на машине с Windows, но делаю контейнеры для Linux.Я нашел ответ здесь: Запуск Tomcat - ошибка: не удалось найти или загрузить основной класс

Windows вернула файл setenv.sh в CRLF EOL.Я изменил его обратно в Visual Studio Code, снова запустил контейнер, и все работает!

0 голосов
/ 21 марта 2019

Запустите docker service ls, чтобы увидеть, появляется ли служба ...

также запустить docker service inspect my-service

Это должно дать вам идентификатор контейнера, который вы можете использовать для получения журналов

docker logs CONTAINER_ID

Вы также можете запустить контейнер самостоятельно

docker run IMAGE_NAME

чтобы увидеть результат запуска его как контейнера

/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

Кажется, он не может найти bootstrap.jar или tomcat-juli.jar

Может быть, не копируется Dockerfile?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...