java - Docker Compose OpenJDK - 卷映射不起作用

标签 java docker docker-compose

我正在尝试在 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

我的路径映射有问题吗?

感谢任何帮助,提前致谢。

最佳答案

您的配置存在几个问题。

  1. 编译时未指定sourcepath
  2. 您不需要使用卷来引用您的源/构建工件。
  3. 您不需要 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/

相关文章:

Docker 撰写命名卷 : find volume on host machine

java - 通过 Bouncy CaSTLe 提取 GPG key 使用标志

java - 基于现有值在主键列中插入新值,保持唯一性约束和最大长度约束

java - Tomcat (7&8) : use outgoing http proxy for certain servers

java - Guava的LocalCache无法使用,为什么?

docker - Docker:调用TCP 127.0.0.1:8091:getsockopt:连接被拒绝

docker - "Remove"Dockerfile 中的 VOLUME

windows - Dockerfile vs从容器创建镜像

macos - 从注册表中提取图像时如何修复 Docker 的 "Error pulling image...too many redirects"故障?

python - Docker-compose MemoryError