通过 Intellij 的 Tomcat/Docker 说...“找不到 /Users/blah/yadda/tomcat/bin/setclasspath.sh 这个文件是运行这个程序所必需的”
Posted
技术标签:
【中文标题】通过 Intellij 的 Tomcat/Docker 说...“找不到 /Users/blah/yadda/tomcat/bin/setclasspath.sh 这个文件是运行这个程序所必需的”【英文标题】:Tomcat/Docker via Intellij says... "Cannot find /Users/blah/yadda/tomcat/bin/setclasspath.sh This file is needed to run this program" 【发布时间】:2021-08-09 23:07:34 【问题描述】:尝试在本地 Mac 上的 Docker 容器中运行 Tomcat。已经在 Intellij 的 Container Config 对话框中设置了 Env Variables,并且确定有足够的容器在启动时似乎正在寻找文件但抛出错误。
该文件确实存在于该位置,并且权限是全面的 r/w。
这是尝试部署容器时生成的服务构建日志:
Deploying 'TomcatContainer Image id: tomcat:latest'... Existing container found: 41dd80a5fed99c657955cb773db8526ae1120cde54ae66889554ba3213c4ef7d, removing... Creating container... Container Id: b14609a8cf48d619a3e1d7607410557456fb1a0fba40fed52b455b211e130147 Container name: 'TomcatContainer' Starting container 'TomcatContainer' 'TomcatContainer Image id: tomcat:latest' has been deployed successfully.
来自 Docker Inspect 的环境变量:
JAVA_HOME
Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home/
CATALINA_HOME
Users/blah/yadda/apache-tomcat-9.0.45
但是从项目文件夹中运行 echo $JAVA_HOME
和 echo $CATALINA_HOME
会返回空。
下面的这些(来自 Inspect)似乎是 Docker Image 的默认值......但这些文件在我的本地不存在;不知道该怎么做:
TOMCAT_NATIVE_LIBDIR
/usr/local/tomcat/native-jni-lib
LD_LIBRARY_PATH
/usr/local/tomcat/native-jni-lib
提前致谢。
【问题讨论】:
【参考方案1】:好的,我再一次回答自己。
关于 Docker 容器和环境变量的问题存在一些基本的误解。在这种情况下,这些术语似乎指的是容器本身内的环境——而不是我所怀疑的与主机操作系统交互的容器。
当我明白这一点后,我意识到我需要将我的 WAR 文件放入容器中。
Intellij 似乎可以通过 Services>Docker>Containers>Edit Configs>Volume Bindings 做到这一点; 主机路径:全限定路径/Project/target; 容器路径:usr/local/tomcat/webapps,正如他们所说,这是一种享受。
这篇文章涵盖了:Deploying Java webapp to Tomcat 8 running in Docker container
【讨论】:
以上是关于通过 Intellij 的 Tomcat/Docker 说...“找不到 /Users/blah/yadda/tomcat/bin/setclasspath.sh 这个文件是运行这个程序所必需的”的主要内容,如果未能解决你的问题,请参考以下文章
在 Tomcat 上通过 IntelliJ 部署 SpringBoot(休息服务)战争给出 404