java - 在 docker stack deploy 期间容器未启动,无法找到或加载主类,无法进一步诊断
问题描述
我正在帮助一个项目,该项目由一个 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 代码很旧,但它应该可以工作,我从未接触过它。
主要是,我不知道从哪里开始。谷歌搜索只会出现他们可以访问更多调试信息的东西,而我只是没有足够的东西继续下去。Java不是我的强项。我错过了什么?
更新 3/21/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 3/21/19:我能够解决这个问题。我应该包含更多信息:我在 Windows 机器上,但正在制作 Linux 容器。我在这里找到了答案:Tomcat 启动 - 错误:找不到或加载主类
Windows 已将该setenv.sh
文件恢复为 CRLF EOL。我在 Visual Studio Code 中将其改回,再次运行容器,一切正常!
解决方案
我将此添加到原始帖子中,但也将其添加到此处以正确将问题标记为已回答:
我能够解决这个问题。我应该包含更多信息:我在 Windows 机器上,但正在制作 Linux 容器。我在这里找到了答案:Tomcat 启动 - 错误:找不到或加载主类
Windows 已将该setenv.sh
文件恢复为 CRLF EOL。我在 Visual Studio Code 中将其改回,再次运行容器,一切正常!
推荐阅读
- opencv - 带有特定标记的 OpenCV 自定义 Aruco 字典?
- azure-blob-storage - Azure 数据工厂缺少 Blob 触发器
- java - 有没有办法使用 Java Hibernate 锁定 MySQL 数据库中的行
- google-chrome-devtools - 查找表单的 REST 请求
- sql - SQL - 按范围分组值
- postgresql - Postgres 选择了错误的执行计划。真空分析似乎没有改变主意
- c# - 如何保存/加载游戏时间?(统一引擎)
- awk - 如何将重复的行合并到具有主键和多于一列信息的同一行中
- android - Flutter:使用 AppBar 导航时留在包装器内
- javascript - 使用 Vue.js 或 Nuxt.js 混合 SSR 和静态