You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过docker-compose.yml运行javac与java命令的问题求助

解决Docker Compose运行Java程序找不到文件的问题

核心问题分析

你的问题主要出在两个地方:

  • Docker Compose中带&&的command命令需要通过shell执行,否则会被解析为单个命令的参数,导致执行异常
  • 绑定目录的路径或本地文件结构可能存在匹配问题

解决方案步骤

1. 确认本地文件结构

确保你的项目目录结构如下(以无package声明的Java程序为例):

项目根目录/
├── docker-compose.yml
└── jonolson/
    └── Program.java

Program.java必须直接放在本地的jonolson文件夹下,和docker-compose.yml同级。

2. 修正docker-compose.yml配置

修改command为shell执行形式,同时明确绑定路径的相对写法:

services:
  my-java-app:
    image: openjdk:19
    working_dir: /src/java
    # 用sh -c包裹带&&的命令,确保shell解析执行
    command: sh -c "javac Program.java && java Program"
    volumes:
      - type: bind
        # 用./明确指定当前目录下的jonolson文件夹
        source: ./jonolson
        target: /src/java

3. 处理带package声明的情况

如果你的Program.java开头有package jonolson;,需要调整目录结构和配置:

  • 本地目录结构改为:
项目根目录/
├── docker-compose.yml
└── jonolson/
    └── jonolson/
        └── Program.java
  • 修正docker-compose.yml:
services:
  my-java-app:
    image: openjdk:19
    working_dir: /src
    command: sh -c "javac jonolson/Program.java && java jonolson.Program"
    volumes:
      - type: bind
        source: ./jonolson
        target: /src

4. 验证文件是否正确绑定

如果还是报错,先进入容器检查文件是否存在:

docker-compose run my-java-app ls -l /src/java

如果输出里没有Program.java,说明本地jonolson文件夹的位置不对,或者docker-compose.yml的source路径写错了。

内容的提问来源于stack exchange,提问作者Jonathan Olson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:42:38