Dockerfile执行报错:unknown instruction: APT-GET求助
问题解决:Dockerfile中
unknown instruction: APT-GET错误 错误根源
你的Dockerfile第一阶段的RUN命令存在语法错误:apt-get upgrade -y && |这一行多了一个多余的竖线|,破坏了命令的连续性,导致Docker将下一行的apt-get误识别为独立的Docker指令,而非RUN命令的延续部分,从而抛出unknown instruction: APT-GET错误。
此外,Dockerfile还有两个逻辑问题:
- 你在容器内克隆了Git仓库,但后续COPY指令试图从宿主机构建上下文复制仓库文件,这是无效操作(宿主机不存在该路径),应直接使用容器内克隆好的文件。
mvn clean install已包含package阶段操作,无需单独执行mvn package。
修正后的Dockerfile
FROM maven:3.8.5-openjdk-17 AS MAVEN_BUILD # 修复语法错误:移除多余的|符号 RUN apt-get update && \ apt-get upgrade -y && \ apt-get install git -y WORKDIR /repositorio/ RUN git clone https://gitlab.com/booking_hub/grupo_04_bookinghub.git # 直接使用容器内克隆的项目文件,无需从宿主机COPY WORKDIR /repositorio/grupo_04_bookinghub/backend/APIrest/APIrest/ # 合并mvn命令,clean install已包含package RUN mvn clean install -Dmaven.test.skip=true FROM openjdk:17-slim WORKDIR /app # 从构建阶段复制生成的jar包 COPY --from=MAVEN_BUILD /repositorio/grupo_04_bookinghub/backend/APIrest/APIrest/target/APIrest-*.jar /app/APIrest.jar ENTRYPOINT ["java","-Dspring.profiles.active=dev", "-jar", "APIrest.jar"]
额外优化建议
- Ansible Playbook优化:你的handler中的
Criar rede servers不会自动触发,建议改为独立task或添加notify触发;同时用docker_compose模块替代shell命令,更符合Ansible最佳实践:
- name: "System: Executando o docker compose da aplicação Backend" become: true docker_compose: project_src: /home/ubuntu/Backend files: docker-compose-java.yml state: present
- Docker构建缓存优化:先复制pom.xml再执行mvn命令,利用Docker构建缓存,避免代码变更时重复下载依赖:
FROM maven:3.8.5-openjdk-17 AS MAVEN_BUILD RUN apt-get update && \ apt-get upgrade -y && \ apt-get install git -y WORKDIR /repositorio/ RUN git clone https://gitlab.com/booking_hub/grupo_04_bookinghub.git WORKDIR /repositorio/grupo_04_bookinghub/backend/APIrest/APIrest/ # 先复制pom.xml,缓存依赖下载层 COPY pom.xml . RUN mvn dependency:go-offline # 再复制源码 COPY src ./src RUN mvn clean install -Dmaven.test.skip=true
内容的提问来源于stack exchange,提问作者FelipeGodoy96
相关产品推荐
相关产品推荐

