无法通过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
相关产品推荐
相关产品推荐

