Docker Compose构建失败:changes out of order报错求助
解决Docker Compose构建报错:changes out of order: "target/diplomAPI-0.0.1-SNAPSHOT.jar" ""
问题背景
执行docker-compose build时触发报错:failed to solve: changes out of order: "target/diplomAPI-0.0.1-SNAPSHOT.jar" ""。已确认diplomAPI-0.0.1-SNAPSHOT.jar存在于target目录,Dockerfile与docker-compose.yml位于同一目录,尝试删除ARG行、分离配置文件目录等操作均无效。
原Dockerfile内容
FROM openjdk:alpine ARG JAR_FILE=target/*.jar COPY ./target/diplomAPI-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
原docker-compose.yml内容
version: '3' services: app: build: context: . dockerfile: Dockerfile ports: - "8080:8080" depends_on: - db db: image: postgres restart: always ports: - "5432:5432" environment: POSTGRES_DB: mobilka POSTGRES_USER: postgres POSTGRES_PASSWORD: 12345
完整错误日志
PS C:\Users\extre\IdeaProjects\diplomAPI> docker-compose build [+] Building 0.0s (0/0) docker:default [+] Building 0.0s (0/0) docker:defaultr reading preface from client //./pipe/docker_engine: file has already been closed [+] Building 2.2s (6/7) docker:default => [app internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 180B 0.0s => [app internal] load metadata for docker.io/library/openjdk:alpine 2.0s => [app auth] library/openjdk:pull token for registry-1.docker.io 0.0s => [app internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => ERROR [app internal] load build context 0.0s => => transferring context: 57B 0.0s => [app 1/2] FROM docker.io/library/openjdk:alpine@sha256:1fd5a77d82536c88486e526da26ae79b6cd8a14006eb3da3a25eb8d2d682ccd6 0.0s ------ > [app internal] load build context: ------ failed to solve: changes out of order: "target/diplomAPI-0.0.1-SNAPSHOT.jar" ""
解决方法
- 检查
.dockerignore文件:这个错误大多因为构建上下文被错误过滤。打开项目根目录下的.dockerignore,确保没有target/或diplomAPI-0.0.1-SNAPSHOT.jar这类条目,若存在则删除。 - 简化Dockerfile指令:原ARG参数未实际使用,直接简化COPY路径,避免路径歧义。修改后的Dockerfile如下:
FROM openjdk:alpine COPY target/diplomAPI-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
- 清理Docker构建缓存:缓存异常可能导致此类问题,执行以下命令清理缓存后重新构建:
docker builder prune docker-compose build
- 确认工作目录:确保执行
docker-compose build时,当前终端所在目录是项目根目录(即包含target文件夹的目录),若不是则先通过cd命令切换到对应目录。
内容的提问来源于stack exchange,提问作者Andy Good
相关产品推荐
相关产品推荐

