我正在尝试在 docker compose 创建的容器中执行 Java 应用程序。
这是撰写 yaml:
version: "3.7"
services:
randomnum-generator:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
image: randomnum-generator:latest
container_name: java-randomnum-generator
这是 Dockerfile
FROM openjdk:latest
WORKDIR /app/src
RUN javac Main.java
CMD ["java", "Main"]
实际路径 (.) 包含一个“src”文件夹,其中包含 Main.java。当我尝试以这种方式执行它时,收到错误消息“找不到文件:Main.java,用法:javac
我的路径映射有问题吗?
感谢任何帮助,提前致谢。
最佳答案
您的配置存在几个问题。
- 编译时未指定
sourcepath
。 - 您不需要使用卷来引用您的源/构建工件。
- 您不需要 JDK 来运行该应用程序。只需要构建它即可。
假设您有以下文件结构
src/Main.java
Dockerfile
docker-compose.yml
你可以这样做:
Dockerfile
:
FROM openjdk:11-jdk AS BUILD
COPY src src
RUN javac -sourcepath src src/Main.java
FROM openjdk:11-jre
COPY --from=BUILD /src/Main.class Main.class
CMD ["java", "Main"]
docker-compose.yml
:
version: "3.7"
services:
randomnum-generator:
build: .
注意:如果您的程序由多个文件组成,您可能需要将它们全部包含或构建一个 jar
。
关于java - Docker Compose OpenJDK - 卷映射不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60860716/