java - 使用 Java 的 Docker : path RUN javac

标签 java docker

我在 Dockerfile 中运行 javac 时遇到问题:

Dockerfile:

FROM jboss/wildfly
RUN javac ../src/Hello.java
RUN java -cp ../src Hello

Hello.java

public class Hello 
{
    public static void main(String[] args)
    {
        System.out.println("Hello, World");
    }
}

当我构建 Dockerfile 时,出现此错误:

javac: file not found: ../src/Hello.java

我的项目“HelloWorld”具有以下结构:

  • docker 目录
    • docker-compose.yml
    • Dockerfile
  • 源代码
    • 你好

最佳答案

RUN 命令仅在容器的文件系统上运行,而不在主机的文件系统上运行。您必须将文件从本地文件系统复制到容器的文件系统:

FROM jboss/wildfly
COPY src /src
RUN javac /src/Hello.java

许多开发人员发现他们希望将构建容器与运行容器分开。运行软件的容器对其环境的要求通常比构建容器少得多(例如,不安装 JDK,仅安装 JRE)。

为此,您的构建容器将是:

FROM openjdk:8
COPY src /src
RUN javac /src/Hello.java
RUN docker build -t foo . && docker push foo

你的运行容器将是

FROM jboss/wildfly
RUN java /src/Hello

记住要挂载在/var/lib/docker.sock中,以便docker build工作

关于java - 使用 Java 的 Docker : path RUN javac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43952866/

相关文章:

java - 从 DataHandler 检测 MIME 类型

java - 带有内容管理系统的 GWT

docker - 具有相同行为的相同dockerfile

python - django项目和django应用程序可以具有不同的docker镜像吗?

python - Docker 进程被神秘的 `Killed` 消息杀死

python - 如何在Docker镜像中编辑库包

java - FrameworkUtil.getBundle 总是返回 NULL

java - 具有基本身份验证功能的 headless 浏览器

java - 字节码与字节流(序列化)

node.js - 如何在使用 docker-compose 和非 root 用户时将 node_modules 保留在容器中?