【问题标题】:Dockerfile ENTRYPOINT for java -cp argumentjava -cp 参数的 Dockerfile ENTRYPOINT
【发布时间】:2021-09-27 12:16:32
【问题描述】:

我正在尝试创建一个 docker 文件来运行一个程序,当我在 gitbash 上运行它时,该程序使用 mysqlconnector jar:

java -cp mysql-connector-java-8.0.26.jar test.java

如何将其转换为 Dockerfile?我尝试将 ENTRYPOINT 设置为上面的字符串,但出现错误提示

“Could Not Find or Load Main Class” Error test.java

【问题讨论】:

  • 到目前为止,您的 Dockerfile 看起来如何?

标签: java docker mysql-connector


【解决方案1】:

Docker 确实知道您需要的依赖项。 您需要将所有类/第 3 方 jar 移动到一个公共文件夹中,以模仿您在本地的操作方式。

FROM openjdk:11

# Set up the Environment Variable for Application
ENV APP_HOME=/app

# Create the directories for Application
RUN mkdir -p ${APP_HOME}

# Setting up the Work directory
WORKDIR ${APP_HOME}

# Exposing the Application Port
EXPOSE 8080

# COPY dependencies
COPY /send-email-api/target/your-mysql-jars ${APP_HOME}

# Copying the artifact from host machine to containers
COPY /send-email-api/target/*classes ${APP_HOME}


ENTRYPOINT java -cp mysql-connector-java-8.0.26.jar test.java

ENTRYPOINT ["java","-cp","mysql-connector-java-8.0.26.jar","test.java"]

【讨论】:

  • 感谢@Susan-mustafa 的回复!根据建议 3,我已将所有需要的第 3 方 jar 复制到我的 WORK_DIR 中。我的 Dockerfile 的主要目的是运行 test.java。我提供了 mysql-connector-java-8.0.26.jar,因为 test.java 在代码中使用了它。根据您的建议,将 ENTRYPOINT 设置为 jar 文件,但我希望 ENTRYPOINT 仍然调用 java 程序并将 jar 文件作为参数包含在内。有没有办法做到这一点?
  • 更新@SABIHA
【解决方案2】:

你忘记编译了。

java test.java

无论你是否使用容器,总是会失败。编译使用

javac test.java

然后你会看到一些 test.class 文件(它在某种程度上违反了 Java 命名约定,但那又怎样)。最后运行这个使用

java test

(省略 .class,Java 将使用类路径找到它)

【讨论】:

  • 我已经编译好了。该程序在 docker 环境之外完全可以正常工作,问题是当我将其添加到 docker 环境时会引发此错误。
  • 请仔细检查:当您在 docker 外部运行代码时,您真的运行 test.java 吗?这让我很怀疑......
  • 在docker外部编译后,我使用java -cp mysql-connector-java-8.0.26.jar test.java运行
  • 想知道这是否是隐式编译 - 您是否也尝试在 docker 文件中提供源代码?在容器中,你有 JRE 还是 JDK?
【解决方案3】:

也许你需要包的路径,例如

java -cp mysql-connector-java-8.0.26.jar my/package/test.java

显然这个类必须有一个main方法

【讨论】:

  • 我还没有创建包名。它是一个简单的 java 文件,在程序中使用了 mysqlconnector jar。您还有其他建议吗?
  • 是 maven 还是 Ant 项目?
  • 它是一个基本的 java 程序文件。我没有使用过 maven 或 Ant。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 2020-01-13
相关资源
最近更新 更多