通过 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_HOMEecho $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

Intellij/Datagrip 通过旧版 uuid 查询 mongo

尝试通过 IntelliJ 连接 Bigquery

无法通过 IntelliJ 打开调试器端口

intellij 通过database 连接hive

如何让 git 通过代理和 IntelliJ Idea 工作?